IOday4
一、思维导图
二、练习
1、使用父子进程完成两个文件的拷贝,父进程拷贝前一半内容,子进程拷贝后一半内容,子进程结束后退出,父进程回收子进程的资源
#include<myhead.h>
int main(int argc, const char *argv[])
{//判断终端输入if(argc != 3){printf("input error!\n");printf("usage:./a.out srcfilename destfilename\n");return -1;}//以只读的形式打开源文件,只写的形式打开目标文件int srcfd = -1;int destfd = -1;if((srcfd = open(argv[1],O_RDONLY)) == -1){perror("open src error");return -1;}if((destfd = open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0664)) == -1){perror("open dest error");return -1;}//拷贝//创建子进程pid_t pid = -1;pid = fork();//定义拷贝容器char buf[128];//父进程拷贝一半if(pid > 0){//循环将源文件数据加载到buf中while(1) {printf("父进程拷贝\n");int res = read(srcfd,buf,sizeof(buf));if(res == 0){break;}//将读入buf中的数据写入目标文件write(destfd,buf,res);}}//子进程拷贝一半if(pid == 0){//循环将源文件数据加载到buf中while(1) {printf("子进程拷贝\n");int res = read(srcfd,buf,sizeof(buf));if(res == 0){break;}//将读入buf中的数据写入目标文件write(destfd,buf,res);}//退出子进程exit(EXIT_SUCCESS);}//父进程阻塞为子进程收尸wait(NULL);printf("父进程为子进程收尸成功\n");//关闭文件描述符close(srcfd);close(destfd);printf("拷贝成功\n");return 0;
}