Linux高階程式設計基礎——程序之父子程序
阿新 • • 發佈:2018-11-10
程序之父子程序
/建立子程序 在子程序中開啟檔案file1,寫入自己的“班級_姓名_學號”, 父程序讀取file1中的內容,並且列印顯示。 在父程序中獲取已經結束的子程序的狀態資訊,列印該資訊,並且列印結束的子程序的程序號。/
#include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <fcntl.h> int main() { pid_t pid; pid=fork(); //建立子程序 int fd; if(pid<0) ("vfork Error \n"); else if(pid == 0) //判斷是否為子程序 { printf("建立子程序成功\n"); fd=open("file1",O_RDWR|O_CREAT, S_IRWXU);//建立一個名為“file1”的文字檔案, //“S_IRWXU”給這個檔案可讀可寫可執行的許可權, //“fd”是建立這個檔案成功後程序返回的檔案描述符,相當於這個檔案的名字 write(fd,"banji_xingming",30); //通過檔案描述符向檔案中寫入資料“” printf("班級_姓名寫入成功\n"); close(fd); exit(5); } else{ sleep(1); fd=open("file1",O_RDWR|O_CREAT, S_IRWXU); char b[50]; read(fd,b,30); //通過檔案描述符讀這個檔案,並把讀到的內容放在”b“這個陣列中 printf("%s\n",b); //輸出陣列 b 中的內容 close(fd); } pid_t pid1;//程序銷燬函式 int status,i; pid1 = wait(&status);//成功返回終止程序的ID,出錯返回-1 if(WIFEXITED(status))//檢測退出狀態 { i = WEXITSTATUS(status);//如果子程序呼叫exit(5)退出,WEXITSTATUS(status)就會返回5。 printf("child’s pid =%d .exit status=%d\n",pid1,i); //列印子程序 id ,和子程序結束時 呼叫的exit()中的數 } return 0; }