创建子父进程,子进程将1.txt内容拷贝到2.txt中,父进程将3.txt内容拷贝到4.txt中。
代码如下
#include <myhead.h>
int main(int argc, const char *argv[])
{
int fd1 = open("./1.txt",O_RDONLY);
if(fd1 == -1){
perror("fd1");
return -1;
}
int fd2 = open("./2.txt",O_WRONLY | O_CREAT |O_TRUNC,0664);
if(fd2 == -1){
perror("fd2");
return -1;
}
int fd3 = open("./3.txt",O_RDONLY);
if(fd3 == -1){
perror("fd3");
return -1;
}
int fd4 = open("./4.txt",O_WRONLY | O_CREAT |O_TRUNC,0664);
if(fd4 == -1){
perror("fd4");
return -1;
}
pid_t pid;
pid = fork();
if(pid>0){
printf("这是父进程:\n");
int len;
while(1){
char s[10] ={0};
len = read(fd3,s,sizeof(s));
if(len == -1){
printf("读取错误!\n");
break;
}
if(len == 0){
printf("已读完3.txt!\n");
break;
}
len = write(fd4,s,sizeof(s));
if(len == -1){
printf("写入错误!\n");
break;
}
}
if(len != -1){
printf("写入4.txt成功!\n");
}
close(fd4);
fd4 = open("./4.txt",O_RDONLY);
printf("4.txt的内容如下:\n");
printf("-----------------\n");
while(1){
char r[10] = {0};
len = read(fd4,r,sizeof(r));
if(len == -1){
printf("读取错误!\n");
break;
}
if(len == 0){
break;
}
printf("%s",r);
}
printf("-----------------\n");
}
else if(pid == 0){
printf("这是子进程:\n");
int len;
while(1){
char s[10]= {0};
len = read(fd1,s,sizeof(s));
if(len == -1){
printf("读取错误!\n");
break;
}
if(len == 0){
printf("已读完1.txt!\n");
break;
}
len = write(fd2,s,sizeof(s));
if(len == -1){
printf("写入错误!\n");
break;
}
}
if(len != -1){
printf("写入2.txt成功!\n");
}
close(fd2);
fd2 = open("./2.txt",O_RDONLY);
printf("2.txt的内容如下:\n");
printf("-----------------\n");
while(1){
char r[10] = {0};
len = read(fd2,r,sizeof(r));
if(len == -1){
printf("读取错误!\n");
break;
}
if(len == 0){
break;
}
printf("%s",r);
}
printf("-----------------\n");
}else {
perror("pid");
return -1;
}
close(fd1);
close(fd2);
close(fd3);
close(fd4);
return 0;
}
运行结果:
今日思维导图