错误LNK2019:函数_main中引用的未解析的外部符号_vfork

时间:2014-07-17 15:57:56

标签: c

我的目标是从关键部分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;
        }
    }

}

1 个答案:

答案 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()。它根本无法安全地用于其他任何事情。