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是我写的一个函数, 功能是打印错误信息并退出。