Apa maksud file 0 byta sehingga tidak dpt dilampirkan

rujukan cincangan

algoritma cincangan

jadual cincangan

nilai cincangan

peranti cincangan

cincangan root

Saya curiga mengapa ada banyak hubungannya dengan visi / desain yang berbentuk Unix (dan akibatnya Linux), dan keuntungan yang berasal dari itu.

Tidak diragukan lagi ada manfaat kinerja yang tidak dapat diabaikan untuk tidak memutar proses tambahan, tapi saya pikir ada lebih dari itu: Early Unix memiliki metafora "semuanya adalah file", yang memiliki keuntungan yang tidak jelas namun elegan jika Anda melihat itu dari perspektif sistem, bukan dari perspektif skrip shell.

Katakanlah Anda memiliki nullprogram command-line Anda, dan /dev/nullsimpul perangkat. Dari perspektif shell-scripting, foo | nullprogram ini benar-benar berguna dan nyaman , dan foo >/dev/nullmembutuhkan sedikit waktu lebih lama untuk mengetik dan bisa terasa aneh.

Tapi inilah dua latihan:

  1. Mari kita melaksanakan program nullmenggunakan alat Unix yang ada dan /dev/null- mudah: cat >/dev/null. Selesai.

  2. Anda dapat menerapkan /dev/nulldalam hal null?

Anda memang benar bahwa kode C untuk hanya membuang input itu sepele, jadi mungkin belum jelas mengapa ada file virtual yang tersedia untuk tugas tersebut.

Pertimbangkan: hampir setiap bahasa pemrograman sudah perlu bekerja dengan file, deskriptor file, dan path file, karena mereka adalah bagian dari paradigma "semuanya adalah file" dari awal.

Jika semua yang Anda miliki adalah program yang menulis ke stdout, well, program tidak peduli jika Anda mengarahkan mereka ke file virtual yang menelan semua penulisan, atau pipa ke program yang menelan semua penulisan.

Sekarang jika Anda memiliki program yang mengambil jalur file untuk membaca atau menulis data (yang dilakukan sebagian besar program) - dan Anda ingin menambahkan fungsionalitas "input kosong" atau "buang hasil ini" ke program-program tersebut - yah, dengan /dev/nullyang gratis.

Perhatikan bahwa keanggunannya adalah mengurangi kompleksitas kode dari semua program yang terlibat - untuk setiap usecase umum-tetapi-khusus yang dapat disediakan oleh sistem Anda sebagai "file" dengan "nama file" yang sebenarnya, kode Anda dapat menghindari penambahan perintah kustom Opsi-line dan jalur kode khusus untuk ditangani.

Rekayasa perangkat lunak yang baik sering tergantung pada menemukan metafora yang baik atau "alami" untuk mengabstraksi beberapa elemen masalah dengan cara yang menjadi lebih mudah untuk dipikirkan tetapi tetap fleksibel , sehingga Anda dapat memecahkan berbagai masalah tingkat tinggi yang pada dasarnya sama tanpa harus menghabiskan waktu dan energi mental untuk mengimplementasikan kembali solusi untuk masalah tingkat rendah yang sama secara konstan.

"Semuanya adalah file" tampaknya menjadi salah satu metafora untuk mengakses sumber daya: Anda memanggil openjalur yang diberikan dalam namespace heirarkis, mendapatkan referensi (deskriptor file) ke objek, dan Anda dapat readdan write, dll pada deskriptor file. Stdin / stdout / stderr Anda juga deskriptor file yang baru saja dibuka sebelumnya untuk Anda. Pipa Anda hanyalah file dan deskriptor file, dan pengalihan file memungkinkan Anda merekatkan semua bagian ini.

Unix berhasil seperti halnya sebagian karena seberapa baik abstraksi ini bekerja bersama, dan /dev/nullpaling baik dipahami sebagai bagian dari keseluruhan itu.

PS Ada baiknya melihat versi Unix dari "semuanya adalah file" dan hal-hal seperti /dev/nullsebagai langkah pertama menuju generalisasi metafora yang lebih fleksibel dan kuat yang telah diterapkan di banyak sistem yang mengikuti.

Sebagai contoh, di Unix objek seperti file khusus seperti /dev/nullharus diimplementasikan dalam kernel itu sendiri, tetapi ternyata cukup berguna untuk mengekspos fungsionalitas dalam bentuk file / folder yang sejak itu banyak sistem telah dibuat yang menyediakan jalan bagi program untuk melakukannya.

Salah satu yang pertama adalah sistem operasi Plan 9, yang dibuat oleh beberapa orang yang sama yang membuat Unix. Kemudian, GNU Hurd melakukan sesuatu yang mirip dengan "penerjemahnya". Sementara itu, Linux akhirnya mendapatkan FUSE (yang telah menyebar ke sistem arus utama lainnya sekarang juga).