通过fcntl设置FD_CLOEXEC标志有什么用? close on exec, not on-fork, 意为如果对描述符设置了FD_CLOEXEC,使用execl执行的程序里,此描述符被关闭,不能再使用它,但是在使用fork调用的子进程中,此描述符并不关闭,仍可使用。 eg: jamie@jamie-laptop:~$ cat test.c #include #include #include #include
int main(void) { int fd,pid; char buffer[20]; fd=open("wo.txt",O_RDONLY); printf("%d/n",fd); int val=fcntl(fd,F_GETFD); val|=FD_CLOEXEC; fcntl(fd,F_SETFD,val);
jamie@jamie-laptop:~$ gcc -o exe1 exe1.c jamie@jamie-laptop:~$ gcc -o test test.c jamie@jamie-laptop:~$ cat wo.txt this is a test jamie@jamie-laptop:~$ ./test 3 child, bytes:1,t //子进程中可使用fd
exe1: read fail:: Bad file descriptor //execl调用的程序中不能使用fd parent, bytes:14,his is a test //父进程中当然能使用fd