F_SETFD:将文件描述符close-on-exec标志设置为第三个参数arg的最后一位类似FD_CLOEXEC。如果返回值和FD_CLOEXEC进行与运算结果是0的话,文件保持交叉式访问exec(),否则如果通过exec运行的话,文件将被关闭(arg被忽略)。fcntl(fd, F_SETFD, 0);//关闭fd的close-on-exec标志 获得/设置文件状态标记 F_GETFL:获取...
一. F_DUPFD :复制文件描述符 。 二. FD_CLOEXEC :设置close-on-exec标志。如果FD_CLOEXEC位是0,执行execve的过程中,文件保持打开。反之则关闭。 三. F_GETFD :读取文件描述词标志。 四. F_SETFD :设置文件描述词标志。 五. F_GETFL :读取文件状态标志。 六. F_SETFL :设置文件状态标志。 其中O_RDONL...
fcntl(fd, F_SETFD, FD_CLOEXEC); // 这里设置为FD_CLOEXEC表示当程序执行exec函数时本fd将被系统自动关闭,表示不传递给exec创建的新进程, 如果设置为fcntl(fd, F_SETFD, 0);那么本fd将保持打开状态复制到exec创建的新进程中
int fcntl(int fd, int cmd, ... /* arg */ ); 其中,操作类型由cmd决定。cmd可取如下值: F_DUPFD:复制文件描述符 F_DUPFD_CLOEXEC:复制文件描述符,新文件描述符被设置了close-on-exec F_GETFD:读取文件描述标识 F_SETFD:设置文件描述标识 F_GETFL:读取文件状态标识 F_SETFL:设置文件状态标识 F_GETLK...
int val=fcntl(fd,F_GETFD); val|=FD_CLOEXEC; fcntl(fd,F_SETFD,val); pid=fork(); if(pid==0) { //子进程中,此描述符并不关闭,仍可使用 char child_buf[2]; memset(child_buf,0,sizeof(child_buf) ); ssize_t bytes = read(fd,child_buf,sizeof(child_buf)-1 ); ...
int val=fcntl(fd,F_GETFD); val|=FD_CLOEXEC; fcntl(fd,F_SETFD,val); pid=fork(); if(pid==0) { //子进程中,此描述符并不关闭,仍可使用 char child_buf[2]; memset(child_buf,0,sizeof(child_buf) ); ssize_t bytes = read(fd,child_buf,sizeof(child_buf)-1 ); ...
一. F_DUPFD :复制文件描述词 。 二. FD_CLOEXEC :设置close-on-exec标志。如果FD_CLOEXEC位是0,执行execve的过程中,文件保持打开。反之则关闭。 三. F_GETFD :读取文件描述词标志。 四. F_SETFD :设置文件描述词标志。 五. F_GETFL :读取文件状态标志。
F_GETFD 取得与文件描述符fd联合close-on-exec标志,类似FD_CLOEXEC。如果返回值和FD_CLOEXEC进行与运算结果是0的话,文件保持交叉式访问exec(), 否则如果通过exec运行的话,文件将被关闭(arg被忽略) F_SETFD 设置close-on-exec旗标。该旗标以参数arg的FD_CLOEXEC位决定 F_GETFL 取得fd的文件状态标志,如同...
flag = fcntl(1,F_GETFD,0); printf("close-on-exec is %d\n",flag); fcntl(1,F_SETFD,flag|FD_CLOEXEC); flag = fcntl(1,F_GETFD,0); printf("close-on-exec is %d\n",flag); //system("ls -l"); ret = execve("/bin/ls",argv,environ); ...
F_SETFD 设置close-on-exec标志,该标志以参数arg的FD_CLOEXEC位决定,应当了解很多现存的涉及文件描述符标志的程序并不使用常数 FD_CLOEXEC,而是将此标志设置为0(系统默认,在exec时不关闭)或1(在exec时关闭) 在修改文件描述符标志或文件状态标志时必须谨慎,先要取得现在的标志值,然后按照希望修改它,后设置新标志值...