700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > dup2复制文件描述符

dup2复制文件描述符

时间:2024-09-04 20:32:26

相关推荐

dup2复制文件描述符

dup2是Linux下用来实现文件描述符复制的api,dup2(fd1, fd2)将会把fd1复制到指定的fd2下,如果fd2是一个已经打开的描述符,dup2会自动的先将其安静的关闭。我们知道Linux的进程表中会维护打开的文件表项,复制的作用是使fd2指向了fd1所指向同一个文件。当我们关闭了指向同一个文件的fd的时候,关闭一个fd另外一个fd是不受影响的。下面的例子我们通过把/dev/null复制给标准输出,让程序的标准输出消失掉。

例子

#include <unistd.h>#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <string.h>int main() {printf("befor dup stdout!\n");int devNullFd = open("/dev/null", O_RDWR);dup2(devNullFd, STDOUT_FILENO);printf("after dup stdout!\n");sleep(30);close(devNullFd);const char* testStr = "test";write(STDOUT_FILENO, testStr, strlen(testStr));perror("error:");sleep(10);close(devNullFd);write(devNullFd, testStr, strlen(testStr));perror("error:");return 0;}

结果

befor dup stdout!error:: Successerror:: Bad file descriptor

文件表结构

sudo ls -l /proc/37410/fdtotal 0lrwx------ 1 oujiangping oujiangping 64 Aug 21 16:35 0 -> /dev/pts/6lrwx------ 1 oujiangping oujiangping 64 Aug 21 16:35 1 -> /dev/nulllrwx------ 1 oujiangping oujiangping 64 Aug 21 16:34 2 -> /dev/pts/6lrwx------ 1 oujiangping oujiangping 64 Aug 21 16:35 3 -> /dev/null

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。