내 말은 stdout을 /dev/null로 리디렉션하지 않고 프로그램을 시작하기 전에 stdout을 차단한다는 것입니다. 예를 들어 write(1, "dd", 2);
stdout이 내 장치에 존재하지 않는 것처럼 내가 가진 모든 것이 -1을 반환합니다.
답변1
>&-
9>&-
stdout 또는 fd 9와 같은 리디렉션을 사용하여 파일 설명자를 닫을 수 있습니다 . 예를 들어:
$ /bin/echo foo >&-
/bin/echo: write error: Bad file descriptor
참고하시기 바랍니다,표준이론:
exec 계열 함수 중 하나를 성공적으로 호출한 후 파일 설명자 0, 1 또는 2가 닫히면 구현 시 새 프로세스 이미지에서 파일 설명자에 대해 지정되지 않은 파일을 열 수 있습니다.
따라서 모든 시스템에서 꺼져 있는 것은 아닙니다. 그러나 Linux 및 Mac에서는 잘못된 fd 오류가 발생합니다.
물론 많은 프로그램에서는 fds 0, 1, 2가 열린 파일을 참조할 것으로 예상할 수 있으며 그렇지 않은 경우 잘못 동작할 수 있습니다. 일반적으로 이는 새로 열린 파일이 이들 중 하나에 놓이고(시스템 호출이 가장 낮은 사용 가능 fd를 사용하기 때문에) 실수로 관련 없는 파일에 사용되었을 때 발생합니다.