![是否保证新打开的 `/dev/fd/3` 总是从头开始读取?](https://linux22.com/image/165335/%E6%98%AF%E5%90%A6%E4%BF%9D%E8%AF%81%E6%96%B0%E6%89%93%E5%BC%80%E7%9A%84%20%60%2Fdev%2Ffd%2F3%60%20%E6%80%BB%E6%98%AF%E4%BB%8E%E5%A4%B4%E5%BC%80%E5%A7%8B%E8%AF%BB%E5%8F%96%EF%BC%9F.png)
这是一个 Linux 特定的问题。
bash 脚本是:
echo foo > "a.txt"
exec 3<"a.txt"
cat /dev/fd/3
cat /dev/fd/3
cat /dev/fd/3
输出:
foo
foo
foo
所有这些cat
都显示 的内容/dev/fd/3
。但/dev/fd/3
只是一个符号链接a.txt
。这解释了这种行为,但我不知道是否能保证(如果是的话,通过什么保证):
当你运行时
exec 3<"a.txt"
,/dev/fd/3
始终是一个符号链接a.txt
。每次您打开并读取时
/dev/fd/3
,它都会返回整个正文。
有一个类似但不完全相同的问题的答案: