一、目录简介
- 这个目录下面有一些文件,名为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作为标准输入使用,比使用-更加清晰