要读取文件描述符6,我可以使用<&6
或</dev/fd/6
(aka /proc/self/fd/6
)。通常两者都可以很好地工作。但是,如果该文件描述符恰好是套接字,则会发生奇怪的事情。例如:
$ bash -c 'ls -l /dev/fd/6;cat /dev/fd/6' 6</dev/tcp/localhost/12345
lrwx------ 1 michas michas 64 Jan 10 19:50 /dev/fd/6 -> socket:[315010]
cat: /dev/fd/6: No such device or address
这里ls
显示描述符确实存在。但是用这种方式不可能访问数据。如果我cat <&6
改用其他方法,一切都会再次正常。
两种访问文件描述符的方式有什么区别?
如果数字在变量中给出,是否有访问描述符的好方法?(</dev/fd/$fd
可以,但<&$fd
不能。)
(以上情况在Linux上可以观察到,但在OpenBSD上则不能观察到。-似乎文件描述符在那里是常规字符设备。)
1
这是重复的unix.stackexchange.com/q/98958/38906
—
cuonglm '16
谢谢。它是相关的,但实际上不是重复的。
—
michas