int main(){
int fd=open("t.txt", O_WRONLY|O_CREAT, 0777);
pid_t p;
char buf[100];
int status=0;
memset(buf, 0, sizeof(buf));
p=fork();
if(p<0){
err_exit("fork error");
}else if(p==0){
strcpy(buf, "child child\n");
write(fd,buf, sizeof(buf));
}else{
sleep(1);
strcpy(buf, "father father\n");
write(fd,buf, sizeof(buf));
wait(&status);
}
return 0;
}
open打开文件时,文件指针指向的是文件的第一个字节,所以,如果文件东西会被覆盖。 我写这个程序是想如果文件指针父子进程不共享同一个的话,那么父进程先写完,子进程就会覆盖父进程写的; 子进程先写完,父进程会覆盖子进程写的。总之不会同时出现父进程和子进程的内容,
结果如下:
$cat t.txt
child child
father father
说明子进程共享同一个文件的文件指针,而不是拷贝了父进程的文件指针。(理解意思就好,不要在乎我说的概念)
说明: err_exit是我写的一个函数, 功能是打印错误信息并退出。
本文通过一个C语言程序演示了在Linux环境下,父子进程如何共享文件指针进行文件写入操作。实验结果显示,尽管父进程和子进程都对同一文件进行了写入,但两者的输出内容并未相互覆盖,证明了它们共享同一文件指针。
1138

被折叠的 条评论
为什么被折叠?



