使用/dev/fd目录复制文件描述符

    我们一般通过dup()和dup2()函数来复制文件描述符,现在介绍另外一种方法:

    linux系统下提供了名为/dev/fd的目录,其下有0、1、2等文件,打开文件/dev/fd/n等效于复制描述符n。

    先观察一下/dev/fd这个目录:

    

    可以看到包含了标准输入(0),标准输出(1),标准错误(2)及当前可用文件描述符中的最小值(3)。

    以下代码测试了用打开/dev/fd/n来复制文件描述符n的功能:

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>


int main()
{
int fd, fd2;
char path_name[64];
char string[] = "This is a test for fd copy\n";

/* 打开文件, 显示文件描述符的值 */
fd = open("testfile", O_RDWR);
if(fd == -1) {
printf("can not open test file\n");
exit(1);
}
printf("fd = %d\n", fd);

/* 打开/dev/fd/n,复制该文件描述符 */
sprintf(path_name, "/dev/fd/%d", fd);
fd2 = open(path_name, O_RDWR);
if(fd2 == -1) {
printf("can not open /dev/fd/%d\n", fd);
exit(1);
}
printf("fd2 = %d\n", fd2);

/* 使用复制的文件描述符向文件写数据 */

write(fd2, string, sizeof(string));

close(fd);
close(fd2);

exit(0);

}

    编译后执行,结果如图:


    先创建一个空文件testfile, 用cat指令观察,该文件没有任何内容,然后执行测试程序,测试程序先打开testfile,得到fd为3,然后再打开文件/dev/fd/3,复制该文件描述符,得到fd2=4,最后通过复制的fd2向testfile写入一串数据,程序结束。再用cat指令观察testfile,数据已经被写入该文件,说明复制文件描述符操作成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值