끄적끄적

반응형

컴퓨터 프로그래밍, 특히 유닉스 운영체계에서, 파이프란 한 프로그램 프로세스에서 다른 프로세스로 정보를 전달하는 기술이다. 다른 형태의 프로세스간 통신 (IPC)과는 달리, 하나의 파이프는 한 방향으로만 통신할 수 있다. 기본적으로, 파이프는 한 프로세스의 출력과 같은 매개변수를, 다른 프로세스의 입력으로서 전달한다. 파이프는 받을 프로세스가 읽을 때까지 전달할 정보를 임시로 가지고 있게 된다.

 

  유닉스 쉘을 사용하면, 파이프는 두 개의 명령 사이에 단순히 세로줄 (|)로 구분함으로써 지정할 수 있다. 첫 번째 명령의 출력은 두 번째 명령의 입력으로 사용된다. 파이프 시스템 호출은 프로그램 내에서 비슷한 방법으로 사용된다.


  프로세스들 간의 쌍방향 통신을 위해서는 한 방향 당 하나씩, 두 개의 파이프가 설정될 수 있다. 프로세스간 통신을 위한 파이프의 제한 사항은, 파이프를 사용하는 프로세스들이 반드시 공동의 부(父) 프로세스를 가져야만 한다는 것이다 (즉, 하나의 공통된 개방, 또는 창시 프로세스를 공유하고, 부 프로세스로부터 포크 시스템 호출의 결과로서 존재해야 한다).

 

  파이프는 고정된 크기이며, 적어도 4,096 바이트 이상이다. 




프로세스간 통신 : 파이프

파이프란 무엇인가?

하나의 프로세스에서 다른 프로세스에게로 데이터 흐름을 연결할 때 사용


프로세스 파이프

popen


popen함수는 프로세스 내부에서 다른 프로그램을 새로운 프로세스로 불러낼 수 있고 새로운 프로세스와 데이터를 주고 받을 수 있다.

두번째 매개변수 open_mode가 'r'이면 fread를 통해 불리워진 프로그램으로부터 데이터를 얻어올 수 있다.


open_mode가 'w'이면, fwrite를 통해 불리워진 프로그램으로 데이터를 전송할 수 있다.

open_mode는 'r'과 'w'를 동시에 쓸 수 없다.


pclose

popen으로 생성된 프로세스와 연결된 스트림을 닫는다.


popen으로 출력을 보내기

popen에 실행 인자로 od -c 를 사용한다.


더 많은 데이터를 전달하기

fread로 여러번 읽기를 시도한다. while문으로 fread함수가 더이상 읽을 것이 없을 때까지 계속 읽어온다.


popen은 어떻게 실행되는가?

popen은 먼저 쉘인 sh를 수행하고 인자로 'command'문자열을 넘겨줌으로서 원하는 프로그램을 수행한다. 

이것은 다양한 쉘 명령어를 쓸 수 있는 장점과 동시에 popen을 호출할 때마다 쉴 까지 실행시켜야 한다는 단점이 있다.


반응형
Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]