1. 程式人生 > >Linux高階程式設計基礎——程序之父子程序

Linux高階程式設計基礎——程序之父子程序

程序之父子程序

/建立子程序 在子程序中開啟檔案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;
}