/proc/self/fd/N에 쓰는 것이 안전합니다.

/proc/self/fd/N에 쓰는 것이 안전합니다.

/proc/self/fd/N에 쓰는 것이 안전합니까? 여기서 N은 프로세스가 소유한 파일 설명자입니다.

내 사용 사례는 원격 컴퓨터에 SSH를 통해 연결하는 것입니다.고양이많은 원격 파일을 로컬 파일로. 로컬 파일은 이전에 생성된 후 다른 사용자/프로세스가 볼 수 없도록 즉시 연결이 해제됩니다.

fd = open("/tmp/doo",O_CREAT|O_RDWR);
unlink("/tmp/doo");
...
...
system("ssh -n user@remotehost -- cat /remote_file >/proc/self/fd/N") // N is a valid fd number

쉘에서는 0-9만 허용하므로 출력을 fd(cat /remote_file >&N)로 리디렉션할 수 없습니다.

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07

열린 파일은 0부터 시작하는 십진수로 표시됩니다. 가능한 최대 값은 구현에 따라 정의됩니다. 그러나 모든 구현은 애플리케이션 사용을 위해 최소 0~9(포함)를 지원해야 합니다. 이 숫자를 "파일 설명자"라고 합니다. 0, 1, 2 값은 특별한 의미와 일반적인 용도를 가지며 특정 리디렉션 작업에 의해 암시되며 각각 표준 입력, 표준 출력 및 표준 오류라고 합니다. 프로그램은 일반적으로 표준 입력에서 입력을 받아 표준 출력에 출력을 씁니다. 오류 메시지는 일반적으로 표준 오류에 기록됩니다. 파일 설명자 번호를 지정하기 위해 리디렉션 연산자 앞에 하나 이상의 숫자(삽입된 문자는 허용되지 않음)가 올 수 있습니다.

출력을 두 자리 파일 설명자로 리디렉션하는 중에 문제가 발생했습니다.

관련 정보