题目:创建子父进程,子进程将1.txt内容拷贝到2.txt中,父进程将3.txt内容拷贝到4.txt中。
知识点:
1.fork返回值,==0则创建子进行成功并且可以依靠这个判断是否是子进程在执行。<0则创建失败
2.使用open打开文件,-1则失败。另外使用一个值储存read返回读取的数量,用于write写入的个数,而不是直接使用缓冲区的大小。因为缓冲区可能不是一直满的。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#define buffer_size 20
int main(int argc, const char *argv[])
{
char buf[buffer_size];
int id=fork();
if(id<0){
perror("进程创建失败");
exit(1);
}
if(id==0){
int fp=open("./1.txt",O_RDONLY);
if(fp==-1){
perror("文件打开失败");
exit(1);
}
int fp2=open("./2.txt",O_WRONLY | O_CREAT | O_TRUNC,S_IRUSR | S_IWUSR);
if(fp2==-1){
perror("文件打开失败");
exit(1);
}
ssize_t n_read;
while((n_read=read(fp,buf,buffer_size))>0){
write(fp2,buf,n_read);
}
close(fp);
close(fp2);
}
int fp=open("./3.txt",O_RDONLY);
if(fp==-1){
perror("文件打开失败");
exit(1);
}
int fp2=open("./4.txt",O_WRONLY | O_CREAT | O_TRUNC,S_IRUSR | S_IWUSR);
if(fp2==-1){
perror("文件打开失败");
exit(1);
}
ssize_t n_read;
while((n_read=read(fp,buf,buffer_size))>0){
write(fp2,buf,n_read);
}
close(fp);
close(fp2);
return 0;
}