關於fork的小問題

2021-07-02 20:30:11 字數 1133 閱讀 2039

在閱讀apue的時候,試著在cygwin中測試乙個源程式,如下

1 #include

2 #include

3 #include

4 #include

56 #define     maxline     512

7 static void sig_int( int );

8 int main ( int argc, char *argv )

9 ;11     pid_t   pid = -1;

12     int     status = -1;

1314     if ( signal(sigint, sig_int) == sig_err )

15    

1920     printf( "%% " );

21     while( 1 )

22    

29         if ( buf[strlen(buf) - 1] == '\n' )

30        

3334        if ( pid = fork() == -1 )

35        

39         else if ( pid == 0 ) /*child*/

40        

4546         if ( (pid = waitpid(pid, &status, 0)) < 0 )

47        

5152         printf("%% ");

5354     }

55 }

5657 void sig_int(int inter )

58 63 }

紅色字型的地方明顯出錯了,在執行後得到的結果如下:

$ ./a.exe

% date

tue may 26 10:22:16     2015

tue may 26 10:22:17     2015

在fork後,父子程序都會返回乙個pid,然而在我的**中,將pid = (fork() == -1),由於在父子程序中fork()得到的結果如果成功的話都不可能是-1,因此pid得到的結果都是

0,從而都會進入pid == 0的分支中去,導致出現這樣的結果

關於fork函式的兩個小問題記錄下

1,vfork如果呼叫後沒有執行exec,會導致程序非正常退出,所以必須呼叫exec函式族或者exit 2,fork後父程序的檔案描述符表 程序級 也會被複製到子程序中,二者共享同乙個檔案表 核心級,不會複製。類似於dup函式 檔案描述符表 程序級 fd flags,file pointers fd...

關於Integer的小問題

最近看到書上有一段 讓寫出輸出結果 integer a 1 integer b 1 system.out.println a b system.out.println a.equals b 當時不假思索的就認為結果是false,true.拿到機器上執行結果是true,true.通過請教他人才知道,i...

關於m pMainWnd的小問題

m pmainwnd new cmainwindow 這句新建了乙個cmainwindow類物件,並將其位址賦給m pmainwnd,以後用這個指標來操作此物件 m pmainwnd showwindow m ncmdshow 這句決定了cmainwindow物件 派生自cframewnd類,這是乙...