在閱讀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類,這是乙...