dup() 및 dup2() Linux 시스템 호출

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' 파일을 아래와 같이 하십시오.

dup() 및 dup2() Linux 시스템 호출

위에 표시된 C 프로그램을 실행하면 'dup.txt' 파일은 아래와 같습니다.

dup() 및 dup2() Linux 시스템 호출

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' 파일을 아래와 같이 설정합니다.

dup() 및 dup2() Linux 시스템 호출

위에 표시된 C 프로그램을 실행하면 'tricky.txt' 파일은 아래와 같습니다.

dup() 및 dup2() Linux 시스템 호출 퀴즈 만들기

마음에 드실지도 몰라요