ShellShell在
Shell在cat
ing時找不到文件描述符文件
我創建了一個 TCP 套接字並試圖檢查它的文件描述符。我可以毫無問題地列出它:
[/proc/24846/fd]$ ls -al 11 lrwx------ 1 danb danb 64 10-Sep-19 22:58 11 -> 'socket:[38186892]'
但是嘗試
cat
寫入或寫入文件失敗,因為 shell 突然找不到文件:[/proc/24846/fd]$ echo 'hello' > 11 bash: no such device or address: 11 [/proc/24846/fd]$ cat 11 cat: 11: No such device or address
我不希望這些命令做任何有用的事情,但至少應該有一致性並且應該找到文件。那麼為什麼shell在執行這些特定操作時找不到文件呢?
澄清一下,我不是想知道如何通過 VFS 與套接字通信,而是想知道為什麼我不能對這個文件執行文件操作。
它沒有找不到文件。那是一條不同的錯誤消息;比較
cat /does-not-exist
(實際上cat
沒有找到它,不是外殼)或echo > /path/does/not/exist
(外殼沒有找到它):$ echo > /path/does/not/exist bash: /path/does/not/exist: No such file or directory
您可能會回來,
ENODEV
或者ENXIO
相反,請參閱man 2 open
。strace
(關於cat
案件)可以肯定地告訴你。我在這裡得到ENXIO
:$ ls -l 3 lrwx------. 1 anthony anthony 64 Sep 10 17:39 3 -> 'socket:[11714498]' $ strace -e open,openat -f cat 3 ⋮ openat(AT_FDCWD, "3", O_RDONLY) = -1 ENXIO (No such device or address) ⋮