답변:
그렇습니다. 물론 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
.
mkfifo
및 mknod
사용하는 프로그램 실제로 mknod
는 FIFO를 만들기 위해 (오늘 전에 해당 시스템 호출을 알고하지 않았다) 시스템 호출은. "FIFO"와 "named"라는 용어를 서로 바꿔서 사용할 수 있습니다. 그들은 같은 것입니까? 양방향 명명 된 파이프는 Unix 도메인 소켓을 통해 구현됩니다.
이식성의 극단적 인 가장자리를 제외하고는 동등합니다. mknod ... p
원래 이름이 지정된 파이프를 생성하는 유일한 방법 이었지만 POSIX는 파이프를 생략하고 mkfifo
대신 발명하기로 결정했습니다. 이름이 지정된 파이프는 다른 물건 mknod
이 장치 및 주요 및 부수로 할 수있는 모든 것보다 본질적으로 더 휴대하기 쉬운 개념이기 때문일 것 입니다. mknod
시스템 호출은 POSIX의 초기 verions에서 제외되었다.
따라서 고대 유닉스로의 이식성을 위해 mknod ... p
더 좋습니다. 현대 시스템의 경우 mkfifo
약간 더 낫지 만 mknod ... p
작동하지 않는 실제 현대 유닉스를 찾을 가능성은 거의 없습니다.
mkfifo(2)
실제로는 별도의 시스템 호출이라는mknod(2)
것을 알 수mknod(S_FIFO)
있습니다.