리눅스 파이프 통신 예제

그래서 우리는 개념적으로 예로 리눅스에서 우리의 일상 사용에 파이프를 사용, 파이프는 두 프로세스 사이의 연결, 그래서 한 프로세스에서 표준 출력다른 프로세스의 표준 입력된다. UNIX 운영 체제에서 파이프는 관련 프로세스(프로세스 간 통신) 간의 통신에 유용합니다. 파이프 통신은 단방향 통신으로만 간주됩니다. 그러나 부모와 자식이 파이프를 동시에 작성하고 읽어야 하는 경우 이 솔루션은 파이프를 사용하는 양방향 통신입니다. 양방향 통신을 설정하려면 두 개의 파이프가 필요합니다. 파이프는 명명되고 명명되지 않은 두 가지 맛으로 제공되며 명령줄에서 또는 프로그램 내에서 대화식으로 사용할 수 있습니다. 예는 곧 입니다. 이 문서에서는 유행에서 벗어난 메모리 큐도 살펴봅니다. 이것은 IPC 파이프를 사용 하 여 리눅스에서 촉진 하는 방법에 대 한 매우 기본적인 예. 향후 블로그에서 다른 ipc 메커니즘의 예를 다룰 뿐만 아니라 ipc 리눅스 네임 스페이스 내에서 작동 하는 방법에 터치.

파이프는 하나의 프로세스 내에서 파이프를 사용하는 것은 의미가 없기 때문에, 항상 포크와 함께 사용된다. 이 예제에서는 두 개의 파이프가 작성됩니다. 오늘의 블로그에서 우리는 파이프라는 리눅스에서 매우 간단한 프로세스 통신 메커니즘 중 하나에 대해 설명합니다. IPC는 리눅스 두 프로세스 사이에 통신이 일어날 수 있습니다. 파이프, 메시지 큐, netlink 등과 같은 몇 가지 방법이 있습니다. 대부분의 경우 기본 전제는 공유 메모리의 개념을 중심으로 합니다. 이 공유 메모리에는 다른 IPC 메커니즘에서 사용하는 다른 추상화가 있습니다. 예를 들어 /dev/shm을 사용하여 공유 메모리를 만든 다음 프로세스 주소 공간에 메모리를 매핑하는 경우 IPC를 용이하게 하는 하나의 메커니즘이 될 수 있습니다. 이 경우 메모리가 Linux 페이지 캐시에 만들어지고 /dev/shm에 의해 생성된 파일이 프로세스 주소 공간에 다시 매핑됩니다.

파이프는 둘 이상의 관련 또는 상호 연관된 프로세스 간의 통신 매체입니다. 한 프로세스 내에서 또는 자식프로세스와 상위 프로세스 간의 통신일 수 있습니다. 또한 부모, 자식 및 손자 손녀 간의 통신과 같은 다단계 통신이 될 수 있습니다. 통신은 파이프에 하나의 프로세스 쓰기 및 파이프에서 다른 읽기에 의해 달성된다. 파이프 시스템 호출을 얻으려면 두 개의 파일을 만지작입니다. 파이프는 FIFO(첫 번째 처음 에서 처음)를 동작하고 파이프는 큐 데이터 구조처럼 동작합니다. 읽기 및 쓰기 의 크기는 여기에 일치할 필요가 없습니다. 한 번에 512바이트를 쓸 수 있지만 파이프에서 한 번에 1바이트만 읽을 수 있습니다. POSIX 표준은 쓰기가 PIPE_BUF 바이트를 초과하지 않는 한 쓰기가 인터리브되지 않도록 합니다. 리눅스 시스템에서 PIPE_BUF는 4,096바이트 크기입니다.

파이프에 대한 나의 선호는 단일 작가와 단일 판독기를 가지고, 따라서 문제를 회피하는 것입니다. 파이프에는 엄격한 FIFO 동작이 있습니다: 작성된 첫 번째 바이트는 첫 번째 바이트 읽기이고, 두 번째 바이트는 두 번째 바이트 읽기 등입니다. 메시지 큐는 동일한 방식으로 작업할 수 있지만 FIFO 순서에서 바이트 청크를 검색할 수 있을 만큼 유연합니다. 이것은 리눅스에서 프로세스 간 통신 (IPC)에 대 한 시리즈의 두 번째 문서입니다. 첫 번째 기사는 공유 저장소를 통해 IPC에 초점을 맞췄습니다: 공유 파일 및 공유 메모리 세그먼트. 이 문서에서는 통신 프로세스를 연결하는 채널인 파이프로 전환합니다. 채널에는 바이트 를 쓰기 위한 쓰기 끝이 있고 FIFO(첫 번째, 처음) 순서로 이러한 바이트를 읽기 위한 읽기 끝이 있습니다. 일반적인 사용에서는 한 프로세스가 채널에 기록되고 다른 프로세스가 동일한 채널에서 읽습니다. 바이트 자체는 숫자, 직원 레코드, 디지털 영화 등 모든 것을 나타낼 수 있습니다.

파이프 메커니즘은 파이프로 물을 일부 컨테이너에 채우는 것과 같은 실시간 시나리오로 볼 수 있습니다.