您的位置:首页 > 其它

多进程 fork之后父子进程 对文件描述符的作用

2016-01-03 23:42 274 查看
 #include <stdio.h>

 #include <unistd.h>

 #include <string.h>

#include <sys/types.h>

 #include <sys/wait.h>

#include <fcntl.h>

       

 int main()

 {
int fd = open("data",O_WRONLY | O_CREAT, 0777); 
int pid = -1;
int stat;
if(fd == -1)
{
printf("文件打开失败\n");
}

if((pid = fork()) > 0)
{
write(fd,"12345", strlen("12345"));

                close(fd);

waitpid(pid ,&stat ,0);
}
else if(pid == 0)
{
write(fd,"6789", strlen("6789"));

               close(fd);

}

return 0;

 }

测试结果

[wuliande@bogon 1]$ ls

1.c  1.o  data  makefile  mytest  unpv13e

[wuliande@bogon 1]$ cat data

123456789[wuliande@bogon 1]$ 

子进程获得了父进程的文件描述符

并且两个文件描述符  指向了一个文件表 当父进程写入 12345 时文件偏移量被改写

所以最后的结果没有6789没有覆盖1234

所以当fork之后  1.要关闭自己不用的文件描述符

                             2.对指向同一文件符表的描述符  要进行同步
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: