AIX open(): 파일 설명자 0(!?)

AIX open(): 파일 설명자 0(!?)

특정 디렉터리에 텍스트 파일이 있음을 감지한 후 데몬은 위의 텍스트 파일을 열어 데이터를 읽은 다음 해당 데이터를 TCP 소켓을 통해 전송하는 실행 파일을 시작합니다.

열린 텍스트 파일의 파일 설명자 번호는 파일 처리에 대한 기타 정보와 함께 기록됩니다.

때때로 open() 호출이 파일 설명자 0을 반환하는 것으로 나타났습니다(보통 이는 stdin용으로 예약되어 있음). 오류가 감지되지 않으며 모든 것이 잘 작동합니다. C의 소스 코드는 open() 및 나중에 close()만 수행합니다. 반환된 파일 핸들에 대해 리디렉션, 복사 또는 기타 마술이 수행되지 않습니다.

어떤 상황에서 프로세스의 파일 설명자 0을 일반 용도로 사용할 수 있습니까(그리고 stdin에 귀속되지 않음)?

플랫폼은 AIX 5.2입니다.

답변1

어떤 상황에서 프로세스의 파일 설명자 0이 일반 용도로 사용 가능하게 됩니까(그리고 stdin에 귀속되지 않음)?

<&-누군가가 예를 들어 쉘에서 표준 입력을 닫을 때 .

#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
int main() {
    printf("%d\n",open("foo",O_CREAT));
}

답변2

시스템 open호출은 일반적으로 아직 사용되지 않은 가장 낮은 파일 설명자를 반환합니다. 일반적인 프로그램의 경우 파일 설명자 0, 1, 2가 미리 열린 표준 설명자(입력, 출력 및 오류)에 사용되므로 열린 파일은 3부터 시작합니다. 데몬은 입력을 읽거나 출력을 생성하지 않으므로 일반적으로 파일 설명자 0과 1을 닫거나 /dev/null그곳에서 다시 엽니다. 데몬이 파일 설명자 0을 닫으면 다음으로 열리는 파일은 해당 설명자에 있습니다. 아무 문제가 없습니다.

파일 설명자 0은 실제로 "stdin에 귀속"되지 않습니다.stdin stdin의 정의에 따르면. 일반적인 운영 환경에서는 파일 설명자 0이 입력을 위해 열리도록 준비하지만 입력을 읽지 않는 프로그램은 원하는 어떤 목적으로든 이 설명자를 자유롭게 사용할 수 있습니다.

관련 정보