named pipe 예제

명명된 파이프를 사용하여 백업 및 종료 cron 작업을 동시에 시작하고 백업이 명명된 파이프에 기록될 때까지 종료를 기다릴 수 있습니다. 종료 작업이 파이프에서 무언가를 읽으면 몇 분 동안 일시 중지되어 cron 전자 메일이 나갈 수 있도록 한 다음 시스템을 종료합니다. 다음 셸 스크립트는 읽기 스크립트에서 만든 파이프에 씁니다. 먼저 파이프가 있는지 확인한 다음 파이프에 씁니다. 인수가 스크립트에 주어지면 파이프에 씁니다. 그렇지 않으면, 그것은 “PID에서 안녕하세요”를 씁니다. 명령 ls -l 평소와 같이 하위 셸에서 실행 되지만 bash 생성, 이름 및 나중에 삭제 하는 임시 명명 된 파이프로 출력을 리디렉션합니다. 따라서 cat는 읽을 수있는 유효한 파일 이름을 가지고 있으며, 우리는 ls -l의 출력을 볼 수 있으며 평소보다 한 단계 더 많은 단계를 수행합니다. 마찬가지로 >(명령)을 부여하면 Bash가 임시 파이프의 이름을 지정하고 괄호 안의 명령이 입력을 위해 읽습니다. 파이프의 다른 종류는 FIFO라고도 하는 “명명된” 파이프입니다. FIFO는 “선착순, 선착순”을 의미하며 들어오는 바이트의 순서가 나오는 것과 동일한 속성을 나타냅니다. 명명된 파이프의 “이름”은 실제로 파일 시스템 내의 파일 이름입니다.

파이프는 몇 가지 차이점이있는 다른 파일로 ls로 표시됩니다 : “깨진 파이프”메시지가 발행되는지 여부는 ctrl-C가 눌리면 정확한 순간에 이벤트에 따라 다릅니다. 두 번째 고양이가 x를 읽은 경우 ctrl-C를 누르면 두 번째 고양이가 중지되고 pipe1이 닫히고 첫 번째 고양이가 메시지없이 조용히 멈춥니다. 반면, 두 번째 고양이가 x를 쓰기를 기다리는 경우 ctrl-C는 pipe2가 닫히게 하여 첫 번째 고양이가 쓸 수 있고 오류 메시지가 발행됩니다. 이러한 종류의 임의 동작은 “경합 조건”이라고 합니다. 파이프 간의 통신은 단방향입니다. 파이프는 일반적으로 단방향 통신으로 제한되었으며 양방향 통신을 위해 적어도 두 개의 파이프가 필요합니다. 파이프는 상호 관련 프로세스에만 적합합니다. 파이프는 관련없는 프로세스 통신에 사용할 수 없습니다, 예를 들어, 우리는 하나의 터미널에서 하나의 프로세스를 실행하고 다른 터미널에서 다른 프로세스를 실행하려는 경우, 파이프와 함께 할 수 없습니다. 우리는 두 프로세스 사이에 의사 소통하는 간단한 방법이 있습니까, 간단한 방법으로 관련이없는 프로세스를 말합니까? 대답은 `예`입니다. 명명된 파이프는 두 개 이상의 관련없는 프로세스 간의 통신을 의미하며 양방향 통신을 가질 수도 있습니다. 컴퓨팅에서 명명된 파이프(FIFO라고도 함)는 인턴 프로세스 통신을 위한 방법 중 하나입니다.

명명된 파이프라인은 이름 없는 기존의 셸 파이프라인 대신 파일 시스템을 사용합니다. mkfifo(1] 또는 mknod(2)를 사용하여 명시적으로 생성되며 두 개의 별도 프로세스가 이름으로 파이프에 액세스할 수 있습니다. 파이프의 또 다른 유형이있다, 그러나, 이름 “파이프”를 보증하지만 매우 다른 성격을 가지고 하나. 그것은 당신이 시도하거나 심지어 생각하지 않았을 수 있습니다 하나 – 명명 된 파이프. 명명된 파이프의 또 다른 이름은 FIFO(선착권 우선)입니다. 우리가 특별한 파일의 일종인 명명 된 파이프를 만들 수있는 시스템 호출 (mknod())를 보자. 다음 셸 스크립트는 파이프에서 읽습니다. 먼저 파이프가 존재하지 않는 경우 파이프를 생성한 다음 “종료”를 볼 때까지 루프에서 읽습니다: 단방향 통신을 위해 하나의 파이프와 양방향 통신을 위해 파이프 두 개를 사용했습니다.

Share on Facebook