본문 바로가기
리눅스

Named pipe

by 다움위키 2023. 12. 21.

컴퓨팅에서, 이름-지은 파이프(named pipe, 역시 그것의 행위에 대해 FIFO로 알려져 있음)는 유닉스유닉스-계열 운영 시스템에서 전통적인 파이프 개념에 대한 확장이고, 프로세스-사이 통신 (IPC) 방법 중 하나입니다. 비록 의미론은 상당히 다르지만, 그 개념은 역시 OS/2Microsoft Windows에서 볼 수 있습니다. 전통적인 파이프는 "이름이 지정되지 않은" 것이고 프로세스 동안만 지속됩니다. 이름-지어진 파이프는, 어쨌든, 프로세스의 수명을 넘어서 시스템이 작동하는 동안 지속될 수 있습니다. 그것은 더 이상 사용되지 않으면 삭제될 수 있습니다. 보통 이름-지어진 파이프는 파일로 나타나고, 일반적으로 프로세스가 IPC를 위해 파일에 첨부합니다.

In Unix

전통적인, 이름짓지 않은, 쉘 파이프라인 대신에, 이름-지어진 파이프라인은 파일시스템의 사용을 만듭니다. 그것은 mkfifo() 또는 mknod(),를 사용하여 명시적으로 생성되고, 두 개의 개별 프로세스가 이름에 의해 파이프에 접근할 수 있습니다 – 하나의 프로세서는 읽는 기기로 그것을 열고, 다른 하나는 쓰는 기기로 그것을 씁니다.

예를 들어, 우리는 파이프를 만들고 그것에 파이프로 연결된 것을 압축하도록 gzip을 설정할 수 있습니다:

mkfifo my_pipe
gzip -9 -c < my_pipe > out.gz &

별도의 프로세스 쉘에서, 독립적으로, 우리는 압축될 데이터를 보낼 수 있습니다:

cat file > my_pipe

이름-지어진 파이프는 임의의 파일과 마찬가지로 삭제될 수 있습니다:

rm my_pipe

이름-지어진 파이프는 중간 임시 파일 사용 없이 한 응용 프로그램에서 또 다른 응용 프로그램으로 정보를 전송하기 위해 사용될 수 있습니다. 예를 들어, 다음과 같이 gzip의 출력을 이름-지어진 파이프로 파이프할 수 있습니다:

mkfifo -m 0666 /tmp/namedPipe
gzip -d < file.gz > /tmp/namedPipe

그런-다음 압축되지 않은 데이터를 다음과 같이 MySQL 테이블에 로드합니다:

LOAD DATA INFILE '/tmp/namedPipe' INTO TABLE tableName;

이 이름-지어진 파이프 없이, 우리는 파일을 MySQL에 로드하기 전에 압축되지 않은 전체 버전의 file.gz을 작성해야 합니다. 임시 파일을 쓰는 것은 시간이 많이 걸리고 결과적으로 더 많은 I/O를 발생시키고 하드 드라이브의 여유 공간을 줄입니다.

PostgreSQL의 명령줄 유틸리티, psql은 역시 이름-지어진 파이프에서 데이터 로드를 지원합니다.

In Windows

이름-지어진 파이프는 파일처럼 접근될 수 있습니다. Win32 SDK 함수 CreateFile, ReadFile, WriteFile 및 CloseHandle은 각각 파이프를 열고, 파이프로부터 읽고, 파이프에 쓰고, 파이프를 닫습니다. 유닉스와 달리, PowerShell을 제외하고는 명령줄 인터페이스가 없습니다.

이름-지어진 파이프는 유닉스와 달리 일반 파일시스템 내에서 파일로 생성될 수 없습니다. 역시 유닉스 짝과 달리, 이름-지어진 파이프는 휘발성입니다 (그것에 대한 마지막 참조가 닫힌 후 제거됩니다). 모든 각 파이프는 이름-지어진 파이프 파일시스템 (NPFS)의 루트 디렉터리에 배치되고, 특수 경로 \\.\pipe\ 아래에 마운트됩니다 (즉, "foo"라고 이름-지어진 파이프는 \\.\pipe\foo의 전체 경로 이름을 가집니다). 파이프라이닝에 사용되는 익명 파이프는 실제로 임의의 이름을 가진 이름-지어진 파이프입니다.

그것들은 사용자에게 매우 드물게 표시되지만, 주목할만한 예외가 있습니다. VMware Workstation PC 하드웨어 가상화 도구는, 예를 들어, 에뮬레이트된 직렬 포트를 이름-지어진 파이프로 호스트 시스템에 노출할 수 있고, Microsoft로부터 WinDbg 커널 모드 디버거는 디버깅 세션을 위한 전송으로 이름-지어진 파이프를 지원합니다 (사실, VMware 및 WinDbg는 함께 결합될 수 있습니다 – WinDbg는 통상적으로 대상 컴퓨터에 직렬 연결이 필요하므로 – 드라이버 개발자가 단일 컴퓨터에서 개발 및 테스트를 수행할 수 있습니다). 두 프로그램 모두는 사용자에게 \\.\pipe\name 형식으로 이름을 입력하는 것을 요구합니다.

Windows NT 이름-지어진 파이프는 보안 컨텍스트를 상속할 수 있습니다.

Microsoft Windows에서 이름-지어진 파이프의 요약:

닷넷 프레임워크 3.5는 이름-지어진 파이프 지원을 추가합니다.

이름-지어진 파이프는 Microsoft SQL Server에서 끝점으로 사용할 수도 있습니다.

이름-지어진 파이프는 역시 특수 프로세스-사이 통신 (IPC) 공유 사용을 기반으로 하는 서버 메시지 블록 (SMB) 제품군에서 네트워킹 프로토콜입니다. SMB의 IPC는 사용자의 인증 컨텍스트를 이름-지어진 파이프에 원활하고 투명하게 전달할 수 있습니다. Windows NT 서비스의 전체 NT 도메인 프로토콜 제품군은 Exchange 5.5 관리 응용 프로그램과 마찬가지로 이름-지어진 파이프를 통한 DCE/RPC 서비스로 구현됩니다.

External links