fcntl(fd, F_SETFD, FD_CLOEXEC); // 这里设置为FD_CLOEXEC表示当程序执行exec函数时本fd将被系统自动关闭,表示不传递给exec创建的新进程, 如果设置为fcntl(fd, F_SETFD, 0);那么本fd将保持打开状态复制到exec创建的新进程中
设置/获取文件描述符标志 F_GETFD (void) F_SETFD (long) 设置/获取文件状态标志 F_GETFL (void) F_SETFL (long) 获取/设置文件锁 F_GETLK F_SETLK,F_SETLKW 其中复制文件描述符可参见《linux系统编程之文件与I/O(五):打开文件的内核结构file和重定向》,文件描述符的标志只有一个即FD_CLOEXEC,设置/获取...
复制文件描述符(F_DUPFD或F_DUPFD_CLOEXEC); 获取/设置文件描述符标志(F_GETFD或F_SETFD); 获取/设置文件状态标志(F_GETFL或F_SETFL); 获取/设置异步 IO 所有权(F_GETOWN或F_SETOWN); 获取/设置记录锁(F_GETLK或F_SETLK)。 ...:fcntl()函数是一个可变参数函数,第三个参数根据不同的cmd需要传入相应...
fcntl(fd, F_SETFD, FD_CLOEXEC); // 这里设置为FD_CLOEXEC表示当程序执行exec函数时本fd将被系统自动关闭,表示不传递给exec创建的新进程, 如果设置为fcntl(fd, F_SETFD, 0);那么本fd将保持打开状态复制到exec创建的新进程中
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 ); ...
1. F_DUPFD :复制文件描述词 。 2. FD_CLOEXEC :设置close-on-exec标志。如果FD_CLOEXEC位是0,执行execve的过程中,文件保持打开。反之则关闭。 3. F_GETFD :读取文件描述词标志。 4. F_SETFD :设置文件描述词标志。 5. F_GETFL :读取文件状态标志。
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 ); ...
fcnlt(oldfd, F_DUPFD, 0) ==dup2(oldfd, newfd) 获得/设置文件描述符标记 F_GETFD:读取文件描述符close-on-exec标志 F_SETFD:将文件描述符close-on-exec标志设置为第三个参数arg的最后一位类似FD_CLOEXEC。如果返回值和FD_CLOEXEC进行与运算结果是0的话,文件保持交叉式访问exec(),否则如果通过exec运行...
int fcntl(int fd, int cmd, ... /* arg */ ); 其中,操作类型由cmd决定。cmd可取如下值: F_DUPFD:复制文件描述符 F_DUPFD_CLOEXEC:复制文件描述符,新文件描述符被设置了close-on-exec F_GETFD:读取文件描述标识 F_SETFD:设置文件描述标识
函数原型int fcnt1(int fd,int cmd,struct flock *lock) fd:文件描述符 cmd: F_DUPFD:复制文件描述符 F_GETFD:获得fd的close-on-exec标志,若标志未设置,则文件经过exec 函数之后仍保持打开状态 F_SETFD:设置close-on-exec标志,该标志以参数arg的FD_CLOEXEC位 ...