Pipex Functions


아래의 함수들은 pipex 과제를 하며 많이 사용하게 되는 대표적인 함수들이다. 더 알고싶다면 구글링을 하거나 man function_name 을 쳐보자!


💚 fork()

포크는 새 프로세스를 만드는 시스템 호출이다.

포크를 한 origin process를 부모 프로세스라고 하고, 포크하여 새로 만들어지게 된 프로세스를 자식 프로세스라고 한다. (프로세스가 분기된다!)

유의해야 될 점은,

💚 pipe()

파이프는 프로세스 입장에서는 파일/표준스트림과 같다. 파이프 함수를 사용하여 파이프를 만든 뒤, 동일한 fd테이블(복사한 테이블이니까)을 포크로 복사하게 되면, 두 프로세스는 서로 연결된 파이프 스트림을 가지게 된다. 그리고 두 프로세스는 이러한 파이프 스트림을 통해 통신하게 되는 것이다!

stdin이 파일에서 프로세스로, stdout이 프로세스에서 파일로 이어지는 것과는 달리, pipe프로세스→프로세스로 이루어진다.

+) pipe()함수를 호출하게 되면, 그 결과로 두개의 fd가 제공되는데, 이러한 fd는 각각 하나는 읽는데에, 다른하나는 쓰이는 데에 사용된다.

더 알고싶다면? https://blog.potados.com/dev/things-happend-after-fork/ 으로!

💚 dup2(int fd, int fd2)

fd의 새로운 서술자의 값을 fd2로 지정한다! (fd가 포인팅하고 있는 값을 fd2가 포인팅하고 있는 값으로 지정한다고 이해하면 될 듯!)만약 fd2가 열려있으면 해당 파일을 닫은 다음 복제가 된다. 쉽게 생각하기 위해서는 fd2의 값이 가리키고 있는 값이 fd가 가리키고 있는 값으로 변경이 된다고 생각하면 편하다.