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)
⋮