7月2日作业

思维导图


一、创建一个进程扇 

代码

#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;
}

运行结果