mkfifo <file>
하나의 프로세스가 파일에 쓰고 다른 프로세스는 파일에서 읽는 명명 된 FIFO를 작성 하는 명령을 사용했습니다 .
이제 mknod
명령이 명명 된 파이프를 만들 수 있다는 것을 알고 있습니다. 이 명명 된 파이프는에 의해 생성 된 FIFO와 동등 mkfifo
합니까, 아니면 다른 기능이 있습니까?
답변
그렇습니다. 물론 mknod
블록이나 문자 장치가 아닌 실제로 FIFO를 만들 라고 말한 경우에만 해당됩니다 (요즘 devtmpfs / udev가 수행하는 것처럼 드물게 수행됨).
mkfifo foobar
# same difference
mknod foobar p
에서 strace
이 두 명령에 대해 동일입니다 :
mknod("foobar", S_IFIFO|0666) = 0
따라서 syscall과 관련하여 mkfifo
실제로는 줄임말입니다 mknod
.
따라서 가장 큰 차이점은 의미론입니다. 함께 mkfifo
사용하면 한 번에 FIFO가의 무리를 만들 수 있습니다 :
mkfifo a b c
으로 mknod
당신이 유형을 지정해야하기 때문에, 그것은 오직 하나 개의 인수를 허용합니다
# wrong:
$ mknod a b c p
mknod: invalid major device number ‘c’
# right:
mknod a p
mknod b p
mknod c p
일반적으로 mknod
올바르게 사용하기 어려울 수 있습니다. 따라서 FIFO를 사용하려면를 선택하십시오 mkfifo
.
답변
이식성의 극단적 인 가장자리를 제외하고는 동등합니다. mknod ... p
원래 이름이 지정된 파이프를 생성하는 유일한 방법 이었지만 POSIX는 파이프를 생략하고 mkfifo
대신 발명하기로 결정했습니다. 이름이 지정된 파이프는 다른 물건 mknod
이 장치 및 주요 및 부수로 할 수있는 모든 것보다 본질적으로 더 휴대하기 쉬운 개념이기 때문일 것 입니다. mknod
시스템 호출은 POSIX의 초기 verions에서 제외되었다.
따라서 고대 유닉스로의 이식성을 위해 mknod ... p
더 좋습니다. 현대 시스템의 경우 mkfifo
약간 더 낫지 만 mknod ... p
작동하지 않는 실제 현대 유닉스를 찾을 가능성은 거의 없습니다.