C 警告 : implicit declaration of function 'flock' only applies to one of two flock() calls

标签 c function warnings compiler-warnings flock

我改进了我的信号处理功能,但现在当我尝试通过 gcc ./test2.c -Wall -Wextra 编译我的程序时,我收到以下信息;

./test2.c: In function 'end_app':
./test2.c:21: warning: implicit declaration of function 'flock'
./test2.c: In function 'main':
./test2.c:46: warning: implicit declaration of function 'usleep'
./test2.c:47: warning: implicit declaration of function 'close'

这是test2.c的源码

#include <stdio.h>
#include <stdlib.h>
    #include <signal.h>
    #include <fcntl.h>

    static int end=0;
    static int f;

    static void end_app(int sig){
      printf("Ending from sig#%d",sig);
      struct sigaction si;
      si.sa_handler=SIG_DFL;
      si.sa_flags=0;
      sigaction(SIGCHLD,&si,NULL);
      sigaction(SIGTSTP,&si,NULL);
      sigaction(SIGTTOU,&si,NULL);
      sigaction(SIGTTIN,&si,NULL);
      sigaction(SIGSEGV,&si,NULL);
      sigaction(SIGTERM,&si,NULL);
      sigaction(SIGHUP,&si,NULL);
      flock(f,LOCK_UN); //compiler gives implicit declaration warning
      printf("Ended\n");end=1;
    }

    void newsig(){
      struct sigaction s,o;
      o.sa_handler=SIG_DFL;
      o.sa_flags=0;
      s.sa_handler=&end_app;
      s.sa_flags=SA_RESTART;
      sigaction(SIGCHLD,&s,&o);
      sigaction(SIGTSTP,&s,&o);
      sigaction(SIGTTOU,&s,&o);
      sigaction(SIGTTIN,&s,&o);
      sigaction(SIGSEGV,&s,&o);
      sigaction(SIGTERM,&s,&o);
      sigaction(SIGHUP,&s,&o);
    }

int main(){
      f=open("xx.pid",O_WRONLY|O_CREAT|0x700);
      flock(f,LOCK_EX); //function works here
      printf("Started\n");
      newsig();
      while(1){
        usleep(1000);
        if (end==1){close(f);return 0;}
      }
      return 0;
    }

我的问题是为什么编译器会提示在我的信号处理函数中使用了 flock 但它不会在 main 函数中提示它?我该怎么做才能纠正这个问题?我需要 flock 才能成功锁定和解锁文件。

最佳答案

正如警告所说,flock功能是implicitly declared第一次使用它。由于它已经(隐式地)在文件的前面声明,编译器不会提示后面的用法。

如果您注释掉第一个调用,那么它应该提示第二个。

您应该包含声明函数的头文件以消除警告。根据manpage link在上面 Joachim Pileborg 的评论中,标题是 <sys/file.h> .

关于C 警告 : implicit declaration of function 'flock' only applies to one of two flock() calls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33182748/

相关文章:

c - 共享内存中信号量锁定的问题

c - 计算一个值在数组中出现次数的最佳方法是什么?

c++ - C++中的函数帮助

java - 困难的未经检查的类型转换警告

c - 通过 C libcurl 访问 gmail imaps 服务器失败

c - 如何确保枚举和数组在编译时具有相同的条目?

javascript - Settimeout() javascript 函数被忽略

javascript - 函数返回一个函数?

java - 关闭 Struts 2 中的 OGNL 警告

如果尚未调用方法,Python 会发出警告