쉘이 '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 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)

관련 정보