使用文件IO 实现父进程向子进程发送信息,并总结中间可能出现的各种问题
#include <myhead.h>
//使用文件IO实现父进程向子进程发消息
int main(int argc, const char *argv[])
{
//创建文件
int fd = open("./test.txt",O_WRONLY|O_CREAT|O_TRUNC,0664);
if(-1==fd){
perror("fd open error");
return -1;
}
close(fd);
//创建子进程
pid_t pid =fork();
if(pid>0){
fd = open("./test.txt",O_WRONLY);
if(-1==fd){
perror("fd open errror");
return -1;
}
char buf[20];
printf("父进程\n");
while(1){
memset(buf,0,sizeof(buf));
// printf("请输入:");
scanf("%s",buf);
// printf("父进程\n");
// printf("buf=%s\n",buf);
write(fd,buf,strlen(buf));
if(0==strcmp(buf,"quit")){
printf("父进程即将退出\n");
close(fd);
wait(NULL);
break;
}
}
}
else if(0==pid){
sleep(3);
fd = open("./test.txt",O_RDONLY);
if(-1==fd){
perror("fd open error");
return -1;
}
char buf[20];
// printf("子进程\n");
while(1){
memset(buf,0,sizeof(buf));
int res=read(fd,buf,sizeof(buf));
// lseek(fd,0,SEEK_SET);
if(0==res){
printf("子进程即将退出\n");
close(fd);
exit(EXIT_SUCCESS);
break;
}
printf("%s\n",buf);
// fflush(stdout);
if(0==strcmp(buf,"quit")){
printf("子进程即将退出\n");
close(fd);
exit(EXIT_SUCCESS);
break;
}
}
}
return 0;
}
存在问题
1.父子进程抢占时间片,不能实现父进程先写,子进程在读。
2.需要在父子进程分别打开文件,不然文件光标是共享的,无法读取父进程当前写入的值