파일 디스크립터 6에서 읽으려면 <&6
or </dev/fd/6
(aka /proc/self/fd/6
)를 사용할 수 있습니다 . 일반적으로 둘 다 동일하게 작동합니다. 그러나 해당 파일 설명자가 소켓이면 이상한 일이 발생합니다. 예를 들면 다음과 같습니다.
$ bash -c 'ls -l /dev/fd/6;cat /dev/fd/6' 6</dev/tcp/localhost/12345
lrwx------ 1 michas michas 64 Jan 10 19:50 /dev/fd/6 -> socket:[315010]
cat: /dev/fd/6: No such device or address
다음 ls
은 설명자가 실제로 존재 함을 보여줍니다. 그러나이 방법으로는 데이터에 액세스 할 수 없습니다. cat <&6
대신 사용하면 모든 것이 다시 잘 작동합니다.
파일 디스크립터에 액세스하는 두 가지 방법의 차이점은 무엇입니까?
변수에 숫자가 주어진 경우 설명자에 액세스하는 좋은 방법이 있습니까? ( </dev/fd/$fd
작동하지만 <&$fd
작동하지 않습니다.)
(위 상황은 리눅스에서는 볼 수 있지만 OpenBSD에서는 볼 수 없습니다.-파일 디스크립터는 일반적인 문자 장치 인 것 같습니다.)