以只读模式打开文件时,父和子在fork之后共享相同的文件偏移量吗?

时间:2013-01-12 16:45:45

标签: c linux

我无法理解为什么以只读模式打开的文件会共享父项和子项之间的文件偏移量。程序下面打开一个文件(包含像abcd这样的数据)和下一个fork被调用。现在我试图在子进程和父进程中读取文件。 看起来文件偏移量不会从输出中共享?。

# include <unistd.h>
# include <sys/types.h>
# include <stdio.h>
# include <sys/wait.h>
# include <fcntl.h>

# define CHILD 0

main(){
int fd;
char buf[4];
pid_t pid;  
int childstatus;
    pid = fork();   
fd = open("./test",O_RDONLY);
if( pid == CHILD){
    printf("Child process start ...\n");
    read(fd,buf,2);
    printf(" in child %c\n",buf[0]);
    read(fd,buf,2);
    printf(" in child %c\n",buf[0]);
    sleep(5);
           printf("Child terminating ...\n");
}
// parent
else{    
        printf("In parent  ...\n");     
    sleep(3);
    read(fd,buf,2);
    printf(" in parent %c\n",buf[0]);
    close(fd);
    sleep(5);
           printf("parent terminating ...\n");
}

}

Output :

In parent  ...
Child process start ...
 in child a
 in child c
 in parent a
Child terminating ...
parent terminating ...

1 个答案:

答案 0 :(得分:4)

  

在程序下面打开一个文件(包含像abcd这样的数据)和下一个fork被调用。

不,它没有。您fork然后打开文件。因此父母和孩子分别打开文件并获得单独的打开文件描述。如果您希望它们共享一个打开的文件描述(包含文件指针),则只需打开一次文件 - 然后再调用fork