Vâng, nó tương đương, nhưng rõ ràng chỉ khi bạn mknod
thực sự tạo ra một bộ xếp hình chứ không phải là một khối hoặc thiết bị nhân vật (hiếm khi được thực hiện trong những ngày này như devtmpfs / udev làm điều đó cho bạn).
mkfifo foobar
# same difference
mknod foobar p
Trong strace
đó giống hệt nhau cho cả hai lệnh:
mknod("foobar", S_IFIFO|0666) = 0
Vì vậy, về mặt tòa nhà, mkfifo
thực sự là tốc ký mknod
.
Sự khác biệt lớn nhất, sau đó, là trong ngữ nghĩa. Với mkfifo
bạn có thể tạo ra một loạt các FIFO trong một lần:
mkfifo a b c
Với mknod
, vì bạn phải chỉ định loại, nên nó chỉ chấp nhận một đối số:
# wrong:
$ mknod a b c p
mknod: invalid major device number ‘c’
# right:
mknod a p
mknod b p
mknod c p
Nói chung, mknod
có thể khó sử dụng chính xác. Vì vậy, nếu bạn muốn làm việc với FIFO, hãy gắn bó mkfifo
.
mkfifo(2)
thực sự là một cuộc gọi hệ thống riêng biệtmknod(2)
(nhưng cuối cùng nó sẽ thực hiện chính xác như vậymknod(S_FIFO)
).