dup() 및 dup2() Linux 시스템 호출
듀프()
dup() 시스템 호출은 파일 설명자의 복사본을 만듭니다.
- 새 설명자에 대해 가장 낮은 번호의 사용되지 않은 설명자를 사용합니다.
- 복사본이 성공적으로 생성되면 원본 및 복사본 파일 설명자를 서로 바꿔서 사용할 수 있습니다.
- 둘 다 동일한 열린 파일 설명을 참조하므로 파일 오프셋 및 파일 상태 플래그를 공유합니다.
통사론:
int dup(int oldfd);
oldfd: old file descriptor whose copy is to be created. C// C program to illustrate dup() #include#include #include int main () { // open() returns a file descriptor file_desc to a // the file 'dup.txt' here' int file_desc = open ( 'dup.txt' O_WRONLY | O_APPEND ); if ( file_desc < 0 ) printf ( 'Error opening the file n ' ); // dup() will create the copy of file_desc as the copy_desc // then both can be used interchangeably. int copy_desc = dup ( file_desc ); // write() will write the given string into the file // referred by the file descriptors write ( copy_desc 'This will be output to the file named dup.txt n ' 46 ); write ( file_desc 'This will also be output to the file named dup.txt n ' 51 ); return 0 ; } 이 프로그램에는 파일 열기 및 쓰기가 포함되어 있으므로 온라인 컴파일러에서는 실행되지 않습니다.
설명:
open()은 파일 설명자 file_desc를 'dup.txt'라는 파일에 반환합니다. file_desc는 'dup.txt' 파일로 일부 파일 작업을 수행하는 데 사용할 수 있습니다. dup() 시스템 호출을 사용한 후 file_desc의 복사본이 copy_desc로 생성됩니다. 이 복사본은 동일한 'dup.txt' 파일로 일부 파일 작업을 수행하는 데 사용될 수도 있습니다. 두 번의 쓰기 작업 후 하나는 file_desc를 사용하고 다른 하나는 copy_desc를 사용하여 동일한 파일이 편집됩니다(예: 'dup.txt'). 코드를 실행하기 전에 쓰기 작업 전의 'dup.txt' 파일을 아래와 같이 하십시오.
![]()
위에 표시된 C 프로그램을 실행하면 'dup.txt' 파일은 아래와 같습니다.
![]()
dup2()
dup2() 시스템 호출은 dup()과 유사하지만 기본적인 차이점은 가장 낮은 번호의 사용되지 않은 파일 설명자를 사용하는 대신 사용자가 지정한 설명자 번호를 사용한다는 것입니다.
통사론:
int dup2(int oldfd int newfd);
oldfd: old file descriptor
newfd new file descriptor which is used by dup2() to create a copy.중요 사항:
- dup() 및 dup2() 시스템 호출을 사용하기 위한 헤더 파일 unistd.h를 포함합니다.
- 설명자 newfd가 이전에 열려 있었다면 재사용되기 전에 자동으로 닫힙니다.
- oldfd가 유효한 파일 설명자가 아니면 호출이 실패하고 newfd가 닫히지 않습니다.
- oldfd가 유효한 파일 설명자이고 newfd가 oldfd와 동일한 값을 갖는 경우 dup2()는 아무 작업도 수행하지 않고 newfd를 반환합니다.
dup2() 시스템 호출의 까다로운 사용법:
newfd 대신 dup2()에서와 같이 어떤 파일 설명자라도 넣을 수 있습니다. 다음은 표준 출력(stdout)의 파일 설명자가 사용되는 C 구현입니다. 그러면 모든 printf() 문이 이전 파일 설명자가 참조하는 파일에 기록됩니다.
C // C program to illustrate dup2() #include #include #include #include int main () { int file_desc = open ( 'tricky.txt' O_WRONLY | O_APPEND ); // here the newfd is the file descriptor of stdout (i.e. 1) dup2 ( file_desc 1 ) ; // All the printf statements will be written in the file // 'tricky.txt' printf ( 'I will be printed in the file tricky.txt n ' ); return 0 ; }
이는 아래 그림에서 볼 수 있습니다. dup2() 작업 이전의 'tricky.txt' 파일을 아래와 같이 설정합니다.
위에 표시된 C 프로그램을 실행하면 'tricky.txt' 파일은 아래와 같습니다.
퀴즈 만들기