首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fork()中filedescriptor的行为

fork()中filedescriptor的行为
EN

Stack Overflow用户
提问于 2011-10-13 23:27:02
回答 1查看 144关注 0票数 0

从父进程派生子进程时,父进程中的所有变量都会复制到新的子进程中。因此,当我们在fork发生之前打开一个公共文件,并试图从父文件和子文件中读取相同的文件时,这两个文件都应该独立地打印结果。但当我尝试实现这一点时,从文件中读取父项和子项似乎是交错的。需要知道为什么会发生这种情况。当从父进程派生新进程时,甚至应该复制文件描述符。那么到底出了什么问题呢?

代码语言:javascript
复制
#include<stdio.h>
#include<fcntl.h>

main()
{
int fp;
char buff[11];
int pid;
fp = open("file1.txt", O_RDONLY);
pid = fork();
if(pid==0)
{
    printf("Child begins %d\n", getpid());
    read(fp, buff, 5);
    buff[10] = '\0';
    printf("Child read:");
    puts(buff);
    printf("Child exiting\n");
}
else
{
    read(fp, buff, 5);
    buff[10] = '\0';
    printf("Parent read:");
    puts(buff);
    printf("Parent exiting\n");
}
 }

现在假设file1.txt的内容是"Hello world",那么父进程和子进程都应该输出"Hello“。但是我看到的是一个孩子/父母的指纹"Hello“和另一个指纹”world“。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-13 23:38:12

文件描述符是重复的,但重复项指向系统文件表中的相同条目,因此两个进程共享相同的文件指针。内核的read()和write()是原子的,因此每个进程都会在文件指针被其他进程移动后看到它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7756545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档