我正在尝试一个示例程序,通过使用 fork() 的两个进程从文件开头读取数据。
当调用 fork() 时,内核会创建一个子进程,这个子进程继承父进程的属性。所有打开的文件和文件描述符。我的目标是让孩子和父母从头开始阅读文件。我尝试使用 dup2() 创建单独的描述符,但它不起作用。
我的第二个问题是,有没有办法让子进程在完成初始任务后继续处理另一个任务。(信号必须发送给父母以要求另一项任务?父母将通过管道或先进先出与孩子沟通)
int main(int argc, char* argv[]){
int fd1,fd2;
int fd;
int read_bytes;
pid_t pid;
char* buff;
buff = malloc(sizeof(buff)*5);
if(argc < 2){
perror("\nargc: Forgot ip file");
return 1;
}
fd = open(argv[1],O_RDONLY);
if(-1 == fd){
perror("\nfd: ");
return 2;
}
pid = fork();
if(pid == -1){
perror("\n pid");
return 1;
}
else if(pid == 0){ // CHILD
dup2(fd1,fd);
read_bytes = read(fd1,buff,5);
printf("\n %s \n",buff);
}
else{ //PARENT
wait();
printf("\n Parent \n");
dup2(fd2,fd);
//close(fd);
read_bytes = read(fd2,buff,5);
printf("\n %s \n",buff);
}
return 0;
}
请帮忙理解