파이프 예제

개념적으로 파이프는 한 프로세스의 표준 출력이 다른 프로세스의 표준 입력이 되도록 두 프로세스 간의 연결입니다. UNIX 운영 체제에서 파이프는 관련 프로세스(프로세스 간 통신) 간의 통신에 유용합니다. 파이프는 동시에 두 개 이상의 명령을 매시업하고 연속적으로 실행하는 데 도움이됩니다. 당신은 순식간에 복잡한 작업을 수행 할 수있는 강력한 명령을 사용할 수 있습니다. C 프로그래밍 언어로 `파이프라인`을 만드는 것은 간단한 셸 예제보다 좀 더 관련이 있을 수 있습니다. C를 사용하여 간단한 파이프를 작성하려면 pipe() 시스템 호출을 사용합니다. 두 정수의 배열인 단일 인수를 사용하며 성공하면 배열에는 파이프라인에 사용할 두 개의 새 파일 설명자가 포함됩니다. 파이프를 만든 후 프로세스는 일반적으로 새 프로세스를 생성합니다(자식이 열린 파일 설명자 상속 기억). 아래 예제에서는 파일 `abc`에 있는 내용의 역정렬을 보여 주습니다. 파이프는 한 명령의 출력이 다음에 입력 역할을하도록 두 개 이상의 명령을 사용할 수 있습니다 리눅스에서 명령입니다. 즉, 각 프로세스의 출력은 파이프라인과 같은 다음 프로세스에 대한 입력으로 직접 입력됩니다.

기호 `|`는 파이프를 나타냅니다. 파이프는 FIFO(첫 번째 처음 에서 처음)를 동작하고 파이프는 큐 데이터 구조처럼 동작합니다. 읽기 및 쓰기 의 크기는 여기에 일치할 필요가 없습니다. 한 번에 512바이트를 쓸 수 있지만 파이프에서 한 번에 1바이트만 읽을 수 있습니다. 다음 예제에서는 파이프의 실제 값을 보여 주며, 파이프의 실제 값을 보여 주실 수 있습니다. “/bin/ls-al/” 명령과 “/usr/bin/tr a-z A-Z” 명령 사이에 파이프를 만듭니다. 이는 셸 명령을 실행하는 것과 같습니다. 두 파일 설명자의 배열은 fd[2]입니다. fd[1]에 기록된 모든 것은 fd[0]에서 읽게 됩니다.

위의 예제에서는 상위 프로세스를 파이프에 대한 표준 출력을 포기하고 프로세스 자체가 cmd1의 임원으로 대체된 상태로 전환했습니다. 상위 프로그램과 입력 및 출력 스트림을 유지하지만 두 자식 프로세스 간에 파이프를 실행하려면 두 자식을 포크해야 합니다. `i` 옵션 grep을 사용하면 모든 줄에서 문자열 `a`(대/소문자 구분)를 필터링했습니다. 어떤 프로세스에서 포크를 사용할 때 파일 설명자는 자식 프로세스와 상위 프로세스 전반에 걸쳐 열려 있습니다. 파이프를 만든 후 포크를 호출하면 부모와 자식이 파이프를 통해 통신할 수 있습니다. `cat` 명령을 사용하여 여러 페이지에 걸쳐 있는 파일을 볼 때 프롬프트가 파일의 마지막 페이지로 빠르게 이동하면 중간에 콘텐츠가 표시되지 않습니다. 파이프는 두 파일 설명자 간에 단방향 통신 링크를 만드는 시스템 호출입니다. 파이프 시스템 호출은 두 정수의 배열에 대한 포인터로 호출됩니다.

반환시 배열의 첫 번째 요소에는 파이프의 출력에 해당하는 파일 설명자가 포함됩니다(읽을 내용). 배열의 두 번째 요소에는 파이프의 입력(물건을 쓰는 위치)에 해당하는 파일 설명자가 포함되어 있습니다. 파이프의 입력으로 전송되는 바이트는 파이프의 다른 쪽 끝에서 읽을 수 있습니다. 이 명령에 대한 확장도 있으며 아래에 나열되어 있습니다. 먼저 파이프를 만듭니다. 그런 다음 우리는 자식 프로세스를 포크합니다.

About the author: mcadmin