dup dup2 예제

dup() 및 dup2() 함수는 F_DUPFD 명령을 사용하여 fcntl()에서 제공하는 서비스에 대한 대체 인터페이스를 제공합니다. 호출: [EBADF]에 대한 설명에서 범위를 벗어난 필드의 경우 유효하지 않은 fildes의 지정된 케이스에 의해 적용됩니다. fildes 및 fildes2에 대한 설명은 fildes2와 관련된 유일한 종류의 무효가 범위를 벗어났는지 여부이기 때문에 다릅니다. 즉, fildes2가 dup2() 호출이 수행될 때 열린 파일을 참조하는지 여부는 중요하지 않습니다. 성공시 dup2()는 원본과 공통된 새 파일 설명기를 반환합니다. 1003.1-2001은 훨씬 더 복잡합니다. 단계 간에 호출되고 파일 설명자 할당 또는 할당 해제할 수 있는 신호 catch 함수의 가능한 효과는 분명하지 않습니다. 이는 신호를 차단하여 피할 수 있습니다. 다음 예제는 stderr에서 stdout으로 메시지를 리디렉션합니다. dup() 및 dup2() 함수는 중복됩니다. 그들의 서비스는 fcntl() 함수에 의해서도 제공됩니다.

많은 기존 응용 프로그램이 이를 사용하기 때문에 주로 역사적 이유로 IEEE Std 1003.1-2001의 이 볼륨에 포함되었습니다. dup2() 함수는 중요한 영역에서 동기화 메커니즘으로 사용하기 위한 것이 아닙니다. dup2() 시스템 호출의 까다로운 사용: dup2(에서와 같이) newfd 대신에 모든 파일 설명자가 배치될 수 있습니다. 다음은 표준 출력(stdout)의 파일 설명자가 사용되는 C 구현입니다. 이렇게 하면 모든 printf() 명령문이 이전 파일 설명자가 참조한 파일에 기록됩니다. dup2() 함수는 fcntl()에 의해 형식 안전하지 않은 버전에서 제공되는 형식 안전 버전의 기능을 제공하므로 사용되지 않는 것으로 표시되지 않습니다. POSIX Ada 바인딩에 사용됩니다. fildes2가 {OPEN_MAX}보다 크거나 같으면 dup2()는 errno가 [EBADF]로 설정된 경우 -1을 반환합니다.

dup2() 시스템 호출은 dup()와 비슷하지만 기본적인 차이점은 가장 낮은 번호의 사용되지 않는 파일 설명자를 사용하는 대신 사용자가 지정한 설명자 번호를 사용한다는 것입니다.

This entry was posted in Uncategorized. Bookmark the permalink.