警告:隐含的函数声明'守护进程'

时间:2014-06-11 11:38:17

标签: c daemon unistd.h implicit-declaration

我在编译程序时收到此警告。 daemon()在unistd.h中声明并包含在内。如何修复或消失?

错误:

dcron.c: In function 'main':
dcron.c:35:4: warning: implicit declaration of function 'daemon' [-Wimplicit-function-declaration]
    if (daemon(1, 0) != 0) {
    ^

计划的一部分:

if (daemon(1, 0) != 0) {
   fprintf(stderr, "error: failed to daemonize\n");
   syslog(LOG_NOTICE, "error: failed to daemonize");
   return 1;
}

设置: gcc4.8.2,glibc2.19 CFLAGS = -std = c99 -Wall -Wpedantic -Wextra

2 个答案:

答案 0 :(得分:3)

您需要添加相关的头文件并启用_BSD_SOURCE功能测试宏:

#define _BSD_SOURCE
#include <unistd.h>

来自man 3 daemon

  

glibc的功能测试宏要求(参见feature_test_macros(7)):

     

daemon():_ BSD_SOURCE || (_XOPEN_SOURCE&amp;&amp; _XOPEN_SOURCE&lt; 500)

答案 1 :(得分:2)

Linux daemon()可通过#define

获取
  • _XOPEN_SOURCE
  • _BSD_SOURCE

#define _XOPEN_SOURCE 

#define _BSD_SOURCE 
#include之前的

#include <unistd.h>

或将-D _XOPEN_SOURCE-D _BSD_SOURCE添加到编译命令中。