http://blog.163.com/tlost_heaven/blog/static/79246122200910239562451/
每个文件描述符都有一个close-on-exec标志。默认情况下,这个标志最后一位被设置为 0。这个标志符的具体作用在于当开辟其他进程调用exec()
族函数时,在调用exec函数之前为exec族函数释放对应的文件描述符。这是两个程序:
//file:fcntl 代码
int main()
{
pid_t pid;
fd = open("test.txt",O_RDWR|O_APPEND);
if (fd == -1)
##printf("open err\n");
printf("fd = %d",fd);
printf("fork!\n");
fcntl(fd, F_SETFD, 1);
char *s="ooooooooooooooooooo";
pid = fork();
if(pid == 0)
execl("ass", "./ass", &fd, NULL);
wait(NULL);
write(fd,s,strlen(s));
close(fd);
return 0;
}
ass 源代码
int main(int argc, char *argv[])
{
int fd;
printf("argc = %d ",argc);
fd = *argv[1];
printf("fd = %d",fd);
char *s = "zzzzzzzzzzzzzzzzzzz";
write(fd, (void *)s, strlen(s));
close(fd);
return 0;
}
PS:那个test.txt提前已经创建 为空文件~
fd = 3
fork!
argc = 2
fd = 3
test.txt中的内容为:fd = 3
fork!
argc = 2
fd = 3
lost
test.txt中的内容为: