TCPソケットを作成し、対応するファイル記述子を確認しようとしました。問題なく一覧表示できます。
[/proc/24846/fd]$ ls -al 11
lrwx------ 1 danb danb 64 10-Sep-19 22:58 11 -> 'socket:[38186892]'
しかし、cat
シェルが突然ファイルを見つけることができないため、ファイルに書き込みまたは試みることは失敗します。
[/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
このコマンドは役に立つことを期待していませんが、少なくとも一貫性を保ち、ファイルが見つかるはずです。それでは、これらの特定のタスクを実行するとシェルがファイルを見つけられないのはなぜですか?
明確にするために、VFSを介してソケットと通信するのではなく、なぜこのファイルに対してファイル操作を実行できないのか疑問に思います。
答え1
ファイルが見つかりません。以下は別のエラーメッセージです。比較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)
⋮