シェルが「cat」にファイル記述子ファイルを見つけることができません。

シェルが「cat」にファイル記述子ファイルを見つけることができません。

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 openstracecat事件については)確かに申し上げます。私がここで得るもの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)

おすすめ記事