2014-07-17 61 views
0

我的目標是從Critical Section C程序(Windows 7上的Visual Studio 2013)獲取輸出。我收到以下錯誤:錯誤LNK2019:無法解析的外部符號_vfork在函數_main中引用

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; 
     } 
    } 

} 

回答

2

Windows不落實vfork()系統調用;它通常只在UNIX系統上可用。您將需要使用線程來實現等效的功能。

Windows開發人員中心的「Processes and Threads」下提供了有關在Windows中使用線程的信息。


請注意,書面,你的程序調用未定義行爲。的POSIX.1規範解釋說:

...如果該過程由vfork() 創建行爲未定義要麼修改從比從vfork()用於 存儲返回值pid_t類型的變量之外的任何數據,或返回功能 其中vfork()被調用,或者在成功調用 調用_exit(2)exec(3)函數系列之一之前調用任何其他函數。

長話短說,您只能使用vfork()導致exec()。它不能安全地用於其他任何事情。

+0

我想也許OP打算使用[Cygwin](http://stackoverflow.com/q/985281/1174378)... –

+0

親愛的黃昏,謝謝你的信息。由於保持開發工具和操作系統不是強制性的,我可以使用任何操作系統實現相同的概念。對於Unix,Linux可以支持這個程序嗎?如果是,那麼Ubunto 10? –

+0

是的,Linux就是這樣一個系統。但是,請記住我要添加到我的文章中的註釋。 – duskwuff

相關問題