#include<stdio.h> #include<unistd.h> void main() {int p1,p2,i; while((p1=fork())==-1);//創建子進程p1,這個是一個技巧,直到創建子進程成功為止 if(p1==0) { lockf(1,1,0);//加鎖第一個參數為stdout(標准輸出設備描述符) //printf("child %4d %4d\n",getppid(),getpid(),p1); for(i=0;i<5;i++) printf("daughter%d\n",i); lockf(1,0,0); } else{ while((p2=fork())==-1);//創建子進程p2 if(p2==0){ lockf(1,1,0);//加鎖第一個參數為stdout(標准輸出設備描述符) for(i=0;i<5;i++) printf("son%d\n",i); lockf(1,0,0); //解鎖 } else {lockf(1,1,0);//加鎖 for(i=0;i<5;i++) printf("parent%d\n",i); lockf(1,0,0); //解鎖 } } } /*本實驗所涉及的的系統調用lockf(files,function,size), 用作鎖定文件的某些段或者整個文件。本函數的頭文件為include<unistd.h> 其中file為文件描述符,function是鎖定和解鎖:1表示鎖定,0表示解鎖; size是鎖定或者解鎖的字節數,為0,表示從文件的當前位置到文件尾。*/