read\write 的不同搜索指针

Different Seek Pointer for read\write

我试图了解当父进程打开一个新文件然后使用 fork() 创建一个新的子进程时查找指针机制是如何工作的。

假设我有以下代码:

int main(){
int fd = open("myFile.txt", O_RDWR | O_CREAT)
if(fork() == 0){
 write(fd,"stack overflow", 16);
 close(fd);
}
else{
 wait(NULL);
 char buff[17];
 read(fd, &buff, 16);
 printf("%s", buff);
}

}

我没有将任何内容打印到标准输出,但我真的不明白为什么会这样。如果有不同的读写寻道指针那么 运行 这段代码将导致打印“堆栈溢出”到标准输出,这不是更聪明吗?

显然不是,想得到一个解释

两个进程都使用相同的文件描述(即相同的打开文件)。

他们正在访问同一个文件指针,因为它是同一个文件描述的一部分。当其中一个写入一些字符时,所有文件指针都会前进,因为它是同一个文件指针。

您可以通过调用lseek(fd, 0, SEEK_CUR)获取文件指针。如果在启动子程序之前打印文件指针,等待之后,你应该看到它已经改变了。