리눅스 fifo 예제

클라이언트-서버 패러다임은 항상 작동하고 클라이언트로부터 요청을 수신하고 응답을 제공하는 단일 서버 프로세스로 구성됩니다. 클라이언트는 라이브 사용자의 입력 및 출력을 관리하는 프로세스입니다. 클라이언트가 오고 가지만 서버는 항상 작동합니다. 클라이언트는 프로세스 간 통신 메커니즘을 사용하여 서버와 통신합니다. 패러다임의 각 프로세스에는 메시지를 수신하기 위한 시스템 차원의 메커니즘이 있습니다. 이후 섹션의 예제에서는 FIFO를 메시지 수신 메커니즘으로 사용합니다. 즉, 서버에는 클라이언트가 서버에 대한 메시지를 넣을 수 있는 FIFO가 있습니다. 마찬가지로 각 클라이언트에는 서버가 해당 클라이언트에 대한 메시지에 넣을 수 있는 FIFO가 있습니다. mkfifo()는 이름 경로 이름으로 FIFO 특수 파일을 만듭니다.

여기 모드는 FIFO의 권한을 지정합니다. 그것은 일반적인 방법으로 프로세스의 umask에 의해 수정됩니다 : 생성 된 파일의 권한은 (모드 및 ~ umask)입니다. 명명 된 파이프의 실용적인 사용의 가장 좋은 예 중 하나 … 물론 이전 예제는 백업이 완료되면 신호를 알리는 일반 파일을 생성하기만 하면 상당히 안정적으로 수행될 수 있습니다. 더 복잡한 예로는 매시간 또는 그렇게 깨어나는 백업이 있고 명명된 파이프를 읽고 실행해야 하는지 확인하는 경우일 수 있습니다. 그런 다음 백업하려는 파일을 많이 변경할 때마다 파이프에 무언가를 쓸 수 있습니다. 백업이 모든 것을 확인할 필요가 없도록 파이프에 백업하려는 파일의 이름을 작성할 수도 있습니다. Linux에서는 읽기 및 쓰기를 위한 FIFO를 열면 차단 모드와 비차단 모드에서 모두 성공합니다.

POSIX는 이 동작을 정의되지 않은 것으로 만듭니다. 사용 가능한 판독기가 없는 동안 쓰기를 위해 FIFO를 여는 데 사용할 수 있습니다. 교착 상태를 피하기 위해 연결의 양쪽 끝을 사용하는 프로세스는 매우 신중해야 합니다. 위의 mknod 명령 대신 사용할 수 있는 특수 mkfifo 명령이 있습니다. 명명 된 파이프는 리눅스에서 모든 곳에서 사용되며, ls -l 명령 중에 볼 수있는 char 및 블록 파일의 대부분은 char 및 블록 파이프입니다 (이 모든 것은 /dev에 있습니다). 이러한 파이프는 차단 및 비차단이 될 수 있으며, 주요 장점은 IPC에 대한 가장 간단한 방법을 제공한다는 것입니다. 또 다른 유용한 동작은 netcat을 프록시로 사용하는 것입니다. 포트와 호스트를 모두 리디렉션할 수 있습니다. 이 예제를 살펴보십시오: mkfifo 시스템 호출을 사용하여 프로그램에서 FIFO를 만들 수 있습니다. 이러한 빈 명명된 파이프 중 하나를 살펴보기 전에 한 걸음 뒤로 물러서서 명명된 파이프가 어떻게 설정되는지 살펴보겠습니다.

mkfifo라는 명령을 사용합니다. 왜 “FIFO”에 대한 참조? 명명된 파이프는 FIFO 특수 파일이라고도 합니다. “FIFO”라는 용어는 첫 번째 문자인 첫 번째 문자를 나타냅니다. 아이스크림으로 접시를 채우고 먹기 시작하면 LIFO (마지막 에, 선입선) 기동을할 것입니다. 밀짚을 통해 밀크 셰이크를 빨아 경우, 당신은 FIFO 하나를하고있을 것입니다. 다음은 명명된 파이프를 만드는 예제입니다. FIFO 파일 만들기 FIFO 파일을 만들기 위해 mkfifo를 호출하는 함수가 사용됩니다. FIFO 특수 파일은 mkfifo (3)에 의해 생성 될 수 있으며, 파일 유형 aqpaq ls -l로 표시됩니다. Mitch Frazier는 에머슨 일렉트릭(Emerson Electric Co. Mitch)의 임베디드 시스템 프로그래머로 2000년대 초반부터 리눅스 저널의 기여자이자 친구였습니다.