> 파일 및 디렉토리 관리 > mkfifo

mkfifo: 이름 있는 파이프 생성

`mkfifo`는 이름 있는 파이프(FIFO, First-In, First-Out)를 생성하는 명령어입니다. 이름 있는 파이프는 파일 시스템에 존재하는 특수한 파일로, 서로 다른 프로세스 간에 데이터를 교환하는 데 사용되는 통신 채널 역할을 합니다. 일반적인 파이프와 달리 파일 경로를 통해 접근할 수 있어, 독립적인 프로세스들이 쉽게 통신할 수 있도록 돕습니다.

개요

`mkfifo`는 파일 시스템에 특수 파일인 이름 있는 파이프를 생성합니다. 이 파이프는 두 개 이상의 독립적인 프로세스가 데이터를 주고받을 수 있는 통신 채널 역할을 합니다. 한 프로세스가 파이프에 데이터를 쓰면, 다른 프로세스가 파이프에서 데이터를 읽을 수 있으며, 데이터는 선입선출(FIFO) 방식으로 처리됩니다.

주요 특징

  • 파일 시스템에 존재하여 경로로 접근 가능
  • 독립적인 프로세스 간 통신 채널 제공
  • 데이터는 선입선출(FIFO) 방식으로 처리
  • 셸 스크립트에서 복잡한 파이프라인 구성에 유용

주요 옵션

`mkfifo` 명령어는 주로 파일 경로를 인자로 받아 사용되며, 몇 가지 기본적인 옵션을 지원합니다.

생성 옵션

생성된 명령어:

명령어를 조합해 보세요.

설명:

`mkfifo` 명령어를 실행합니다.

위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.

사용 예시

`mkfifo`를 사용하여 이름 있는 파이프를 생성하고, 이를 통해 프로세스 간 통신을 하는 방법을 보여줍니다.

기본 이름 있는 파이프 생성

mkfifo my_pipe

현재 디렉토리에 `my_pipe`라는 이름의 파이프를 생성합니다.

특정 권한으로 파이프 생성

mkfifo -m 600 my_private_pipe

소유자만 읽고 쓸 수 있는 `my_private_pipe`를 생성합니다.

이름 있는 파이프를 이용한 데이터 전송

mkfifo data_channel
echo "Hello from Terminal 1!" > data_channel &
cat < data_channel

한 터미널에서 데이터를 쓰고, 다른 터미널에서 읽는 예시입니다. **터미널 1:** `mkfifo data_channel` `echo "Hello from Terminal 1!" > data_channel` **터미널 2:** `cat < data_channel`

백그라운드 프로세스와 파이프 사용

mkfifo background_output
(ls -l; sleep 2; echo "Done listing") > background_output &
cat < background_output

백그라운드에서 실행되는 프로세스의 출력을 파이프를 통해 다른 명령어로 전달합니다.

팁 & 주의사항

이름 있는 파이프 사용 시 유의할 점과 활용 팁입니다.

파이프 삭제

이름 있는 파이프는 일반 파일처럼 `rm` 명령어로 삭제할 수 있습니다. 사용 후에는 불필요한 파이프를 정리하는 것이 좋습니다.

  • `rm my_pipe`

블로킹(Blocking) 동작

이름 있는 파이프는 기본적으로 블로킹 방식으로 동작합니다. 즉, 한쪽에서 쓰기(또는 읽기)를 시도하면 다른 쪽에서 읽기(또는 쓰기)를 시작할 때까지 해당 작업이 대기합니다. 이 동작을 피하려면 `cat < my_pipe &`와 같이 백그라운드에서 실행하거나, `O_NONBLOCK` 플래그를 사용하여 논블로킹 모드로 열어야 합니다.

임시 파일 시스템 사용

임시로 사용할 파이프는 `/tmp` 디렉토리나 `mktemp` 명령어를 활용하여 고유한 이름을 가진 파이프를 생성하는 것이 좋습니다. 이는 이름 충돌을 방지하고 시스템 재부팅 시 자동으로 정리될 수 있도록 합니다.


동일 카테고리 명령어