我的目标是从关键部分C
计划(Windows 7上的Visual Studio 2013)获取输出。我收到以下错误:
error LNK2019: unresolved external symbol _vfork referenced in function _main
error LNK1120: 2 unresolved externals
我的代码是
#include<stdio.h>
#include<sys/types.h>
#include<stdlib.h>
int turn;
int flag[2];
int main(void)
{
int pid, parent = 1;
printf("before vfork\n");
if ((pid = vfork())<0)
{
perror("vfork error\n");
return 1;
}
while (1)
{
if (pid == 0)
{
while (parent == 1)
{
sleep(2);
}
parent = 0;
flag[0] = 1;
turn = 1;
while (flag[1] && turn == 1);
printf("This is critical section:parent process\n");
flag[0] = 0;
}
else
{
parent = 2;
printf("This is parent");
flag[1] = 1;
turn = 0;
while (flag[0] && turn == 0);
printf("This is critical section:child process %d \n", pid);
flag[1] = 0;
}
}
}
答案 0 :(得分:2)
Windows未实施vfork()
系统调用;它通常仅在UNIX系统上可用。您将需要使用线程来实现等效功能。
有关在Windows中使用线程的信息,请参阅Windows开发人员中心&#34; Processes and Threads&#34;。
请注意,正如所写,您的程序会调用未定义的行为。 POSIX.1规范解释了:
如果由vfork()
创建的流程,则...行为未定义 修改除
pid_t
类型的变量以外的任何数据 存储来自vfork()
的返回值,或从函数中返回 调用vfork()
,或在成功之前调用任何其他函数 致电_exit(2)
或其中一个exec(3)
系列功能。
长话短说,您只能使用vfork()
来引导exec()
。它根本无法安全地用于其他任何事情。