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)
获取文件指针。如果在启动子程序之前打印文件指针,等待之后,你应该看到它已经改变了。
我试图了解当父进程打开一个新文件然后使用 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)
获取文件指针。如果在启动子程序之前打印文件指针,等待之后,你应该看到它已经改变了。