APUE编程:19---文件I/O之(/dev/fd目录)

一、目录简介

  • 这个目录下面有一些文件,名为0、1、2等的文件

二、目录功能

  • 打开文件/dev/fd/n等效于复制描述符n (假定描述符n是打开的)

三、应用1

//例如
fd=open("/dev/fd/0", mode);

注意事项一:

  • 通过这样/dev/fd/打开的文件,参数1对应的文件描述符必须是已经打开的

注意事项二:

  • 拿我们这个为例:这个/dev/fd/0相当于dup(0)函数一样复制了一个文件描述符。fd与描述符0共享同一个文件表项

fd=open("/dev/fd/0", mode); ==> 相当于fd=dup(0);

注意事项三:

  • 第2个参数mode。系统会忽略/dev/fd/xxx打开的mode。例如:描述符0先前被设置为只读,如果我们这个函数fd=open("/dev/fd/0", O_RDWR);即使设置了可读可写,但只有只读生效,写操作不会生效
  • 因此建议,使用/dev/fd/xxx打开一个描述符时,第2个参数要与对应的描述符的打开mode模式相同

四、应用2

  • 我们可以用/dev/fd作为路径名参数调用creat,这与调用open时用O_CREAT作为第2个参数作用相同
fd=creat("/dev/fd/xxx",mode_t mode);

注意事项

  • 虽然可以这样做。但是如果使用creat调用一个已存在的文件,程序仍可以工作,但是要非常小心。因为Linux实现使用指向已知文件的符号链接,在/dev/fd文件上使用creat会导致底层文件被截断
  • creat("/dev/fd/xxx",mode_t mode); ==>类似于open("/dev/fd/xxx",O_CREATE|xxx);

五、应用3

  • filter  file2 | cat file1 - file3 | lpr
  • filter file2 | cat file1 /dev/fd/0 file3 | lpr

例如此处/dev/fd/0作为标准输入使用,比使用-更加清晰

六、附加知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董哥的黑板报

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值