C语言 为什么我的编译器不接受fork(),尽管我包含了< unistd.h>?

e5nqia27  于 12个月前  发布在  其他
关注(0)|答案(6)|浏览(115)

下面是我的代码(创建只是为了测试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'


这有什么不好?

bcs8qyzn

bcs8qyzn1#

unistd.hforkPOSIX standard的一部分,它们在windows上是不可用的(在你的gcc命令提示中,text.exe意味着你不在 *nix上)。
看起来你是把gcc作为MinGW的一部分来使用的,它确实提供了unistd.h头文件,但没有实现像fork这样的函数。Cygwin * 确实 * 提供了像fork这样的函数的实现。
然而,由于这是家庭作业,你应该已经有了关于如何获得工作环境的说明。

nlejzf6q

nlejzf6q2#

你得到了#include <unistd.h>,这是声明fork()的地方。
因此,您可能需要告诉系统在包含系统头文件之前显示POSIX定义:

#define _XOPEN_SOURCE 600

字符串
如果你认为你的系统基本上是POSIX 2008兼容的,你可以使用700,或者对于一个旧的系统甚至是500。
如果你使用-std=c99 --pedantic编译,那么所有的POSIX声明都将被隐藏,除非你显式地请求它们。
您也可以使用_POSIX_C_SOURCE,但使用_XOPEN_SOURCE意味着正确对应的_POSIX_C_SOURCE(和_POSIX_SOURCE,等等)。

n3schb8v

n3schb8v3#

正如你已经注意到的,fork()应该在unistd. h中定义-至少根据Ubuntu 11.10附带的手册页。最小的:

#include <unistd.h>

int main( int argc, char* argv[])
{
    pid_t procID;

    procID = fork();
    return procID;
}

字符串
......在11.10上没有警告的构建。
说到这一点,你使用的是什么UNIX/Linux发行版?例如,我发现了几个不值得注意的函数,这些函数应该在Ubuntu 11.10的头文件中定义。例如:

// string.h
char* strtok_r( char* str, const char* delim, char** saveptr);
char* strdup( const char* const qString);

// stdio.h
int fileno( FILE* stream);

// time.h
int nanosleep( const struct timespec* req, struct timespec* rem);

// unistd.h
int getopt( int argc, char* const argv[], const char* optstring);
extern int opterr;
int usleep( unsigned int usec);


只要在你的C库中定义了它们,这就不会是一个大问题。只要在兼容性头文件中定义你自己的原型,然后向维护你的操作系统发行版的人报告标准头文件问题。

gmxoilav

gmxoilav4#

我认为你应该做以下事情:

pid_t pid = fork();

字符串
要了解有关Linux API的更多信息,请转到this online manual page,甚至现在就进入您的终端并输入,

man fork


祝你好运!

zed5wv10

zed5wv105#

只要在Linux虚拟机中运行程序,我的工作在那里。

ny6fqffe

ny6fqffe6#

在Linux系统或wsl中运行,我也是用这种方法解决的。

相关问题