下面是我的代码(创建只是为了测试fork()):
#include <stdio.h>
#include <ctype.h>
#include <limits.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
int pid;
pid=fork();
if (pid==0) {
printf("I am the child\n");
printf("my pid=%d\n", getpid());
}
return 0;
}
字符串
我收到以下警告:
warning: implicit declaration of function 'fork'
undefined reference to 'fork'
型
这有什么不好?
6条答案
按热度按时间bcs8qyzn1#
unistd.h
和fork
是POSIX standard的一部分,它们在windows上是不可用的(在你的gcc命令提示中,text.exe
意味着你不在 *nix上)。看起来你是把gcc作为MinGW的一部分来使用的,它确实提供了
unistd.h
头文件,但没有实现像fork
这样的函数。Cygwin * 确实 * 提供了像fork
这样的函数的实现。然而,由于这是家庭作业,你应该已经有了关于如何获得工作环境的说明。
nlejzf6q2#
你得到了
#include <unistd.h>
,这是声明fork()
的地方。因此,您可能需要告诉系统在包含系统头文件之前显示POSIX定义:
字符串
如果你认为你的系统基本上是POSIX 2008兼容的,你可以使用700,或者对于一个旧的系统甚至是500。
如果你使用
-std=c99 --pedantic
编译,那么所有的POSIX声明都将被隐藏,除非你显式地请求它们。您也可以使用
_POSIX_C_SOURCE
,但使用_XOPEN_SOURCE
意味着正确对应的_POSIX_C_SOURCE
(和_POSIX_SOURCE
,等等)。n3schb8v3#
正如你已经注意到的,fork()应该在unistd. h中定义-至少根据Ubuntu 11.10附带的手册页。最小的:
字符串
......在11.10上没有警告的构建。
说到这一点,你使用的是什么UNIX/Linux发行版?例如,我发现了几个不值得注意的函数,这些函数应该在Ubuntu 11.10的头文件中定义。例如:
型
只要在你的C库中定义了它们,这就不会是一个大问题。只要在兼容性头文件中定义你自己的原型,然后向维护你的操作系统发行版的人报告标准头文件问题。
gmxoilav4#
我认为你应该做以下事情:
字符串
要了解有关Linux API的更多信息,请转到this online manual page,甚至现在就进入您的终端并输入,
型
祝你好运!
zed5wv105#
只要在Linux虚拟机中运行程序,我的工作在那里。
ny6fqffe6#
在Linux系统或wsl中运行,我也是用这种方法解决的。