1

我有一个通常编译良好的应用程序。它使用两个“非标准”函数(如果我没记错的话,都在 cstdlib 中):sleep() 和 daemon()。更新我的系统后,我发现我的程序将不再编译(它仍然可以在我的旧系统上编译)。GCC 给了我这个信息:

error: 'daemon' was not declared in this scope
error: 'sleep' was not declared in this scope

我记得过去曾经我在 sleep() 上遇到过同样的问题,包括 cstdlib 解决了这个问题。我找不到 cstdlib 的更改日志,也不知道该函数被移动到哪里(如果没有删除)。我还假设 daemon() 也发生了同样的事情。我在谷歌中找不到与此相关的任何内容。

有谁知道这些去了哪里,或者更好地知道我将来可以在哪里找到,以防我再次遇到这个问题?

我知道 daemon() 是一种懒惰的做事方式,并且可以自己编写一个适当的方法来守护这个程序(使用 fork 等),但是使用它非常方便。

4

2 回答 2

8

既不sleep是也不daemon是 C 标准库 (cstdlib) 的一部分。sleep是 POSIX.1-2001 中定义的函数,unistd.h并且daemon是非 POSIX 函数,unistd.h在 linux 上也可用。

作为非标准函数,您可能必须先定义_GNU_SOURCE才能#include <unistd.h>获得daemon.

于 2012-08-11T22:49:01.720 回答
3

Linux 手册页通常包含大多数功能所需的头文件

man daemon

或者

man 3 sleep

两者都可能说你需要#include <unistd.h>

于 2012-08-11T22:51:49.187 回答