父子进程通过共享文件描述符,同时读写同一文件
父进程首先打开一个空文件,然后调用fork创建子进程。
子进程向文件写入“databuffer”,结束。
父进程从文件中读取数据,但失败。总是读不到子进程已经写入到文件中的数据。
代码如下。
#include
#include
#include
#include
#include
int main(int argc, char** argv){
pid_t pid;
int fd = open("./data.dat", O_RDWR|O_TRUNC, 0);
if(fd == -1){
printf("open fails\n");
exit(1);
}
char buf[] = "databuffer\n\0";
if((pid = fork())
printf("fork error\n");
return -1;
}else if(pid == 0){
write(fd, buf, strlen(buf));
fsync(fd);
close(fd);
return 0;
}
wait(NULL);
memset(buf, 0, sizeof(buf)/sizeof(char));
lseek(fd, 0, SEEK_SET);
read(fd, buf, strlen(buf));