명명된 파이프
Named pipe컴퓨팅에서 명명된 파이프(동작 때문에 FIFO라고도 함)는 Unix 및 Unix 유사 시스템에서 기존의 파이프 개념을 확장한 것으로 Inter-Process Communication(IPC; 프로세스 간 통신) 방법 중 하나입니다.이 개념은 OS/2 및 Microsoft Windows에서도 볼 수 있지만 의미론은 크게 다릅니다.기존 파이프는 "이름 없음"으로 지정되며 프로세스가 진행되는 동안에만 지속됩니다.그러나 명명된 파이프는 시스템이 가동되는 한 프로세스의 수명을 넘어 지속될 수 있습니다.더 이상 사용하지 않으면 삭제할 수 있습니다.일반적으로 명명된 파이프는 파일로 표시되며 일반적으로 프로세스는 IPC용으로 파일에 첨부됩니다.
Unix의 경우
기존의 이름 없는 셸 파이프라인 대신 명명된 파이프라인이 파일 시스템을 사용합니다.명시적으로 작성되는 방법:mkfifo()
[1] 또는mknod()
,[2] 및 2개의 개별 프로세스가 파이프에 이름으로 액세스 할 수 있습니다.한쪽 프로세스는 파이프를 리더로 열고 다른 한쪽 프로세스는 라이터로 엽니다.
예를 들어 파이프를 만들고 파이프로 연결된 파일을 압축하도록 gzip을 설정할 수 있습니다.
mkfifo my_pipe gzip -9 - c < my _ pipe >out . gz &
별도의 프로세스 셸에서는 독립적으로 압축할 데이터를 전송할 수 있습니다.
cat file > my_pipe
명명된 파이프는 다른 파일과 마찬가지로 삭제할 수 있습니다.
rm my_pipe
이름 있는 파이프를 사용하여 중간 임시 파일을 사용하지 않고 응용 프로그램 간에 정보를 전송할 수 있습니다.예를 들어, 다음과 같이 gzip 출력을 명명된 파이프에 파이프로 연결할 수 있습니다(여기에서는 out.gz가 위의 예에서 나온 것이지만 임의의 gz일 수 있습니다).
mkfifo - m 0666 / tmp / named Pipe gzip - d < out . gz > / tmp / named Pipe
그런 다음 다음과 같이 압축되지 않은 데이터를 MySQL[3] 테이블에 로드합니다.
로드 데이터. 파일 '/tmp/namedPipe' 안으로 테이블 테이블명;
이 명명된 파이프가 없으면 MySQL에 로드하기 전에 압축되지 않은 버전의 file.gz 전체를 써야 합니다.임시 파일을 쓰는 것은 시간이 많이 걸리고 I/O가 증가하여 하드 드라이브의 빈 공간이 줄어듭니다.
PostgreSQL 명령줄 유틸리티,psql
는 이름 있는 [4]파이프로부터의 데이터 로딩도 지원합니다.
Windows 의 경우
명명된 파이프는 파일처럼 액세스할 수 있습니다.Win32 SDK 기능CreateFile
,ReadFile
,WriteFile
그리고.CloseHandle
파이프 열기, 읽기, 쓰기 및 닫기.Unix와 달리 PowerShell을 제외한 명령줄 인터페이스는 없습니다.
이름 있는 파이프는 Unix와 달리 일반 파일 시스템 내에서 파일로 생성할 수 없습니다.또한 Unix와 달리 명명된 파이프는 휘발성이 있습니다(이 파이프에 대한 마지막 참조가 닫힌 후 제거됨).모든 파이프는 특수 경로 아래에 마운트된 NPFS(Named pipe filesystem)의 루트 디렉토리에 배치됩니다.\\.\pipe\
(즉, "foo"라는 이름의 파이프는 풀패스명을 가집니다.\\.\pipe\foo
) 파이프라인에 사용되는 익명 파이프는 실제로는 랜덤 이름을 가진 파이프입니다.
사용자에게 거의 표시되지 않지만 주목할 만한 예외가 있습니다.VMware 워크스테이션예를 들어 PC 하드웨어 가상화 툴은 에뮬레이트된 시리얼 포트를 호스트 시스템에 명명된 파이프로 표시할 수 있습니다.또한 Microsoft의 WinDbg 커널 모드 디버거는 디버깅 세션을 위한 트랜스포트로서 명명된 파이프를 지원합니다(실제로 VMware와 WinDbg는 일반적으로 타깃 컴퓨터에 시리얼 접속해야 합니다).– 드라이버 개발자가 개발 및 테스트를 단일 컴퓨터에서 수행할 수 있도록 합니다.)두 프로그램 모두 사용자가 이름을 입력해야 합니다.\\.\pipe\name
형태.
Windows NT 이름 있는 파이프는 보안 컨텍스트를 상속할 수 있습니다.
Microsoft Windows의 명명된 파이프 요약:
- 머신간 및 머신내 IPC
- 반이중 또는 전이중
- 바이트 지향 또는 패킷 지향
- 믿을 수 있는
- 커넥션 지향 커뮤니케이션
- 읽기 및 쓰기 차단 또는 비차단(선택 가능)
- 표준 디바이스 I/O 핸들(
ReadFile
,WriteFile
) - 핸들을 만드는 데 사용되는 네임스페이스
- 비효율적인 WAN 트래픽(TCP/IP 슬라이딩 윈도우 등과는 달리 명시적인 데이터 전송 요구)
- Peekable 읽기(파이프의 입력 버퍼에서 제거하지 않고 읽기)
.NET Framework 3.5에는 명명된 파이프 [5]지원이 추가되었습니다.
명명된 파이프는 Microsoft SQL Server에서 [6]끝점으로 사용할 수도 있습니다.
명명된 파이프는 특수 프로세스 간 통신(IPC) 공유를 기반으로 하는 SMB(Server Message Block) 스위트의 네트워킹 프로토콜이기도 합니다.SMB의 IPC는 사용자의 인증 컨텍스트를 명명된 파이프에 심리스하고 투과적으로 전달할 수 있습니다.Windows NT의 전체 NT 도메인 프로토콜 스위트는 Exchange 5.5 관리 응용 프로그램과 마찬가지로 명명된 파이프를 통해 DCE/RPC 서비스로 구현됩니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "mkfifo, mkfifoat - make a FIFO special file". IEEE Std 1003.1-2017. The Open Group.
- ^ "mknod, mknodat - make directory, special file, or regular file". IEEE Std 1003.1-2017. The Open Group.
- ^ "13.2.7 LOAD DATA Statement". MySQL 8.0 Reference Manual. MySQL.
- ^ Aidan Van Dyk (2008-03-27). "Re: psql and named pipes". pgsql-hackers. PostgreSQL.
- ^ "System.IO.Pipes Namespace". Microsoft Developer Network.
- ^ "How to connect to SQL Server by using an earlier version of SQL Server". Microsoft. 2019-11-19. Retrieved 2020-05-19.
외부 링크
- Linux 프로세스 간 통신: 명명된 파이프(Linux Documentation Project, 1996)
- 명명된 파이프 소개(Linux Journal, 1997)