본문 바로가기

컴퓨터 전공 공부/운영체제

파이프, 프로세스 생성, 파일 디스크립터 복제 등의 개념

반응형

파이프, 프로세스 생성, 파일 디스크립터 복제 등의 개념

C언어로 파이프 및 포크 예제 확인


부모 프로세스와 자식 프로세스 간의 파이프와 포크를 기반으로하는 응용 프로그램을 확인해요.
부모 프로세스는 파이프로부터 텍스트 데이터를 읽고, 31바이트씩 읽어 나가며 파이프가 닫힐 때까지 데이터를 출력하죠.
이전 예제와 유사하지만, 부모가 읽는 역할을 하고 자식이 쓰는 역할을 하는 차이가 있어요.
부모 프로세스는 쓰기 파이프를 닫고 텍스트 데이터를 읽는데 그때까지 데이터를 출력하며, 이는 이전 예제와 동일하죠.

프로세스 복제 동작 설명


이 예시에서 다른 점은 자식 프로세스에 있어요.
자식 프로세스를 확인해요.
그 이후에 파운드를 받침 시킨 다음, 자식 프로그램이 실행돼요.
이 작업은 복제 작업을 호출하는 거예요.
따라서 복제 작업을 이렇게 생각할 수 있어요: 첫 번째 인수는 소스에요.
이곳에 있는 모든(All)은 소스를 의미해요.
그리고 이곳은 타겟, 새로운 것이에요.
이것은 이미 존재하던 파일 디스크립터를 의미해요.
여기에 있는 이 둘은 이미 존재했던 거예요.
하지만 여기서 듣고 싶은 건 이 파일 디스크립터에 의해 링크되거나 링크 된 파일의 실제예요.
시스템 콜은 이 파일 디스크립터의 연결을 대체해요.
따라서 이제 파일이 복제돼서, 이는 동일한 파일이 파일 디스크립터 안에 별칭을 가지게 될 거예요.
그래서, 말하자면, 파이프 하나가 파이프로써 값을 기록하고, 이렇게 파이프에 써진 값은 파이프를 통해 읽는 부모 프로세스에 전달돼요.

'hello'를 출력하는 프로그램의 동작 과정은?


프로그램이 실행되면 'hello'를 표준 출력으로 출력해요.
그러나 여기서 표준 출력은 즉시 디스플레이로 향하지 않고 pipe를 통해 중복 복사되어 부모 프로세스로 전달돼요.
부모 프로세스는 메시지를 읽어올 때, pipe로부터 메시지를 받아 디스플레이에 출력하죠.
결과적으로 'hello'는 디스플레이로 직접 출력되지 않고 pipe를 통해 메시지를 전달하게 된답니다.

부모 프로세스와 자식 프로세스의 관계


부모 프로세스를 통해 독립 명령을 실행하고 프로그램을 로드할 수 있어요.
표준 입력 또는 표준 출력을 pipe로 대체하기 전에, 자식 프로세스를 통해 생성된 데이터(프로그램이 보내거나 읽는)는 부모 프로세스로 관리되죠.
다른 명령 또는 프로그램을 실행하고 데이터를 활용하려면 이 방법으로 프로그램을 호출할 수 있어요.

파이프 프로그램 실행 방법과 라이브러리 활용


프로그램 실행 중에 파이프를 사용할 수 있는 라이브러리인 P open이 존재해요.
이 라이브러리는 API를 어떻게 활용하는지를 설명하는 P open 문서에서 확인할 수 있어요.
P open에 대한 더 자세한 명령어와 설명을 원한다면 리눅스 매뉴얼을 참고하는 것이 좋아요.
거기에서는 작동 방식에 대해 보다 자세히 설명하고 있답니다.
프로그램 실행 시 'more'의 출력 데이터는 해당 파일을 통해 확인할 수 있고, 해당 명령에 의해 표준 출력에 인쇄된 모든 내용을 포함해요.
이는 매우 편리한 기능으로, 내부적으로 P open 라이브러리가 파이프를 사용하여 구현된 예제가 있는데, 이는 어떻게 작동하는지 보여줘요.

 

이 글 자세한 필기 정리본

https://mkisos.tistory.com/entry/IPC-pipe2c

 

IPC: pipe2.c

pipe2.c https://www.youtube.com/watch?v=Lj_eBZCiIEo 이 영상은 파이프, 프로세스 생성, 파일 디스크립터 복제 등의 개념을 보다 명확히 이해할 수 있는 예제를 다루고 있습니다. 부모 프로세스와 자식 프로세

mkisos.tistory.com

 

반응형