IPC: pipe2.c

2024. 4. 5. 01:04코딩 도구/운영체제

반응형

pipe2.c

https://www.youtube.com/watch?v=Lj_eBZCiIEo

 

이 영상은 파이프, 프로세스 생성, 파일 디스크립터 복제 등의 개념을 보다 명확히 이해할 수 있는 예제를 다루고 있습니다.
부모 프로세스와 자식 프로세스 간의 통신 및 데이터 교환을 통해 어떻게 동작하는지 자세히 설명하고 있습니다.
특히 파일 디스크립터 복제를 통해 표준 출력을 파이프로 대체하여 데이터를 전송하는 방법을 다루고 있습니다.
이를 통해 독립적인 명령어나 프로그램을 실행하고 해당 데이터를 활용하는 방법을 보여줍니다.


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


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

 

  • 파이프는 프로세스 간에 데이터를 주고받을 수 있는 통로를 의미합니다. 이 영상에서의 파이프는 부모 프로세스와 자식 프로세스 간의 통신을 가능하게 하는데 사용되었습니다. 부모 프로세스는 쓰기 파이프를 닫고, 읽기 파이프를 통해 데이터를 전송하며, 자식 프로세스는 읽기 파이프로부터 데이터를 받아와서 처리하는 것으로 보입니다. 따라서, 전체적인 문맥으로 볼 때, 이 내용은 파이프를 이용한 프로세스 간 통신 및 데이터 교환 방법을 설명하는 것으로 해석될 수 있습니다.
  • 일반적인 의미 및 사용 맥락 설명:
    • 포크란 컴퓨터 프로그래밍에서 새로운 프로세스를 생성하는 것을 의미합니다. 이것은 부모 프로세스로부터 자식 프로세스를 분리하거나, 다른 프로세스로부터의 자식 프로세스를 분리하는 것을 말합니다.
    • 전체적인 문맥으로 볼 때, 이 내용은 프로세스 간 통신이 이루어지는 예제에서 중요한 역할을 한다는 것을 알 수 있습니다. 부모 프로세스와 자식 프로세스 간의 데이터 교환 및 통신을 위해 포크가 사용된 것으로 보입니다.
  • 부가 설명:
    • 포크는 부모 프로세스에서 새로운 자식 프로세스를 생성하기 위한 시스템 콜이며, 이를 통해 부모와 자식 프로세스 간의 독립적인 실행 및 데이터 교환이 가능해집니다.
    • 파이프, 복제 등의 개념을 학습할 때 포크가 사용된다는 점을 고려하면, 포크는 프로세스 간의 효율적인 통신 및 데이터 교환을 위한 중요한 개념임을 알 수 있습니다.


2.프로세스 및 파일 디스크립터 복제 동작 설명


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

 

파운드를 받침 시킨 다음

  • 이 키워드는 영상에서 자식 프로세스가 실행되는 시점을 가리키는 용어입니다.
  • 전체적인 문맥으로 볼 때, "파운드를 받침 시킨 다음"은 자식 프로세스가 실행되기 전의 상태에서 특정 작업을 수행하고 그 후에 자식 프로세스를 실행시키는 것을 의미합니다.
  • 이 용어는 어떤 동작의 순서를 명확히 하고자 할 때 사용되며, 프로그램 실행 과정에서 특정 지점을 강조할 때 유용하게 활용됩니다. 가능성이 높아 보이지만, 확실하지 않다면, 파운드를 받침 시킨 다음은 코드나 작업의 특정 부분을 강조하거나 순차적인 실행 과정을 설명하는 맥락에서 사용될 수 있습니다.

시스템 콜

  • **시스템 콜(시스템 호출)**은 컴퓨터 프로그램이 운영 체제(Operating System)의 서비스를 요청하는 방법입니다. 이는 하드웨어와 상호작용하여 프로그램이 실행되는 것을 도와주는 중요한 개념입니다.
  • 전체적인 문맥으로 볼 때, 이 내용은 시스템 콜이 파일 디스크립터 복제와 관련하여 사용되었음을 알 수 있습니다. 시스템 콜은 파일 디스크립터와 파일 간에 연결을 설정하거나 변경하는 데 사용되며, 이를 통해 프로그램 또는 프로세스가 파일을 읽거나 쓸 수 있습니다. 즉, 시스템 콜은 운영 체제에게 특정 작업을 수행하도록 요청하는 역할을 합니다.

3.프로그램이 'hello'를 출력하고, pipe를 통해 부모 프로세스에 메시지 전달.


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

4.부모 프로세스를 통해 자식 프로세스 제어


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

5.파이프를 사용하여 프로그램 실행하는 방법과 P open 라이브러리의 활용


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

 

  • P open은 특정 라이브러리의 이름으로, 부모 프로세스와 자식 프로세스 간에 통신하고 데이터를 교환하는 역할을 합니다. 이 영상에서는 P open이라는 라이브러리를 활용하여 프로세스를 생성하고 실행하는 방법을 설명하고 있습니다. P open은 API를 통해 명령어를 실행하고, 그 결과를 파일을 통해 돌려주는 기능을 수행합니다.
  • 전체적인 문맥으로 볼 때, 이 내용은 P open 라이브러리를 사용하여 프로그램을 실행하고 데이터를 다루는 방법에 대한 설명이라고 해석될 수 있습니다.




반응형