思維導圖

一、創建一個進程扇?
代碼
#include <25041head.h>int main(int argc, const char *argv[])
{pid_t pid;for(int i=1;i<=4;i++){pid=fork();if(pid>0){sleep(1);}if(pid==0){printf("我是子進程%d:%d,父進程%d\n",i,getpid(),getppid());sleep(1);return 0;}if(pid==-1){ERRLOG("fork error..");}}return 0;
}
運行結果

二、創建一個進程鏈
代碼
#include <25041head.h>int main(int argc, const char *argv[])
{for(int i=1;i<=10;i++){pid_t pid=fork();if(pid>0){wait(NULL);break;}if(pid==0){ printf("子進程%d:%d,父進程%d\n",i,getpid(),getppid());sleep(1);continue; }if(pid==-1){ERRLOG("fork error..");} } return 0;
}
運行結果

三、打印結果




四、實現文件的拷貝,父進程拷貝前一部分,子進程拷貝后一部分
代碼
#include <25041head.h>int main(int argc, const char *argv[])
{int fd1=open("./my.bmp",O_RDONLY);int fd2=open("./new.bmp",O_RDWR | O_TRUNC | O_CREAT,0777);int size=(lseek(fd1,0,SEEK_END))/2;lseek(fd1,0,SEEK_SET); char buf[128]="";int sum=0;size_t res;int r_size;pid_t pid=fork();if(pid>0){while(1){memset(buf,0,sizeof(buf));//判斷buf的大小是否比文件的一半剩余的小,小就修改要讀取的字符數if(size-sum<sizeof(buf)-1)r_size=size-sum;elser_size=sizeof(buf)-1;res = read(fd1, buf,r_size);write(fd2,buf,res);if(res==0)break;sum+=res;if(sum>size)break;}wait(NULL);return 0;}if(pid==0){sleep(1);int fd2=open("./new.bmp",O_RDWR | O_CREAT | O_APPEND,0777);lseek(fd1,size,SEEK_SET);while(1){memset(buf,0,sizeof(buf));res=read(fd1,buf,sizeof(buf)-1);if(res==0)break;if(res==-1){ERRLOG("read error..");}if(-1==write(fd2,buf,res)){ERRLOG("write error..");}}if(-1==close(fd2)){ERRLOG("close error..");}printf("文件拷貝成功\n");exit(0);}return 0;
}
運行結果

