Ya, itu setara, tetapi jelas hanya jika Anda mengatakan mknod
untuk benar-benar membuat FIFO, dan bukan perangkat blok atau karakter (jarang dilakukan hari ini seperti devtmpfs / udev melakukannya untuk Anda).
mkfifo foobar
# same difference
mknod foobar p
Di strace
dalamnya identik untuk kedua perintah:
mknod("foobar", S_IFIFO|0666) = 0
Jadi dalam hal syscalls, mkfifo
sebenarnya adalah singkatan mknod
.
Maka, perbedaan terbesar adalah dalam semantik. Dengan mkfifo
Anda dapat membuat banyak FIFO dalam sekali jalan:
mkfifo a b c
Dengan mknod
, karena Anda harus menentukan jenisnya, ia hanya menerima satu argumen:
# wrong:
$ mknod a b c p
mknod: invalid major device number ‘c’
# right:
mknod a p
mknod b p
mknod c p
Secara umum, mknod
bisa jadi sulit digunakan dengan benar. Jadi jika Anda ingin bekerja dengan FIFO, tetap ikuti mkfifo
.
mkfifo(2)
sebenarnya adalah panggilan sistem yang terpisah darimknod(2)
(tapi itu akhirnya akan melakukan hal yang persis sama sepertimknod(S_FIFO)
).mkfifo
danmknod
sebenarnya program menggunakanmknod
pemanggilan sistem (tidak tahu pemanggilan sistem sebelum hari ini) untuk membuat FIFO. Anda menggunakan istilah "FIFO" dan "bernama" secara bergantian, saya kira. Apakah mereka sama? Pipa bernama dua arah diimplementasikan menggunakan soket domain Unix, bukan?Mereka setara kecuali di tepi ekstrim portabilitas.
mknod ... p
pada awalnya satu-satunya cara untuk membuat pipa bernama, tetapi POSIX memilih untuk menghilangkannya dan menciptakannyamkfifo
, mungkin karena pipa bernama adalah konsep yang secara inheren lebih portabel daripada semua hal lain yangmknod
dapat dilakukan dengan perangkat dan angka utama dan kecilnya. Themknod
system call juga ditinggalkan dari verions awal POSIX.Jadi, untuk portabilitas ke UNIX kuno,
mknod ... p
lebih baik. Untuk sistem modern,mkfifo
ini sedikit lebih baik, meskipun sangat tidak mungkin Anda akan menemukan unix modern yang sebenarnya di manamknod ... p
tidak berfungsi.sumber