개요
`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` 명령어를 활용하여 고유한 이름을 가진 파이프를 생성하는 것이 좋습니다. 이는 이름 충돌을 방지하고 시스템 재부팅 시 자동으로 정리될 수 있도록 합니다.