Pada banyak perangkat, operasi utama adalah mengirim byte dari komputer ke perangkat, atau menerima byte dari perangkat di komputer. Perangkat seperti ini mirip dengan pipa dan berfungsi dengan baik sebagai perangkat karakter . Untuk operasi yang tidak membaca dan menulis (seperti kontrol aliran pada saluran serial), perangkat menyediakan perintah ad-hoc yang disebut ioctl .
Beberapa perangkat sangat mirip dengan file biasa: mereka dibuat dari jumlah byte yang terbatas, dan apa yang Anda tulis pada posisi tertentu nantinya dapat dibaca dari posisi yang sama. Perangkat ini disebut perangkat blok .
Antarmuka jaringan lebih kompleks: apa yang mereka baca dan tulis bukan byte tetapi paket. Meskipun masih mungkin untuk menggunakan antarmuka biasa dengan read
dan write
, itu akan menjadi canggung: mungkin setiap panggilan untuk write
akan mengirim paket, dan setiap panggilan untuk read
akan menerima paket (dan jika buffer terlalu kecil untuk paket cocok, paket akan hilang).
Antarmuka jaringan bisa ada karena perangkat hanya menyediakan ioctl
. Sebenarnya, inilah yang dilakukan beberapa varian unix, tetapi tidak untuk Linux. Ada beberapa keuntungan dari pendekatan ini; misalnya, di Linux, antarmuka jaringan dapat memanfaatkan udev . Tetapi keuntungannya terbatas, itu sebabnya belum dilakukan.
Sebagian besar aplikasi yang berhubungan dengan jaringan tidak peduli dengan antarmuka jaringan individu, mereka bekerja pada tingkat yang lebih tinggi. Misalnya, browser web ingin membuat koneksi TCP, dan server web ingin mendengarkan koneksi TCP. Untuk tujuan ini, yang akan berguna adalah perangkat untuk protokol jaringan tingkat tinggi, misalnya
{ echo $'GET http://www.google.com/ HTTP/1.0\r';
echo $'Host: www.google.com\r';
echo $'\r' >&0; cat; } <>/dev/tcp/www.google.com/80
Sebenarnya ksh dan bash menyediakan antarmuka seperti itu untuk klien TCP dan UDP. Secara umum, bagaimanapun, aplikasi jaringan lebih kompleks daripada aplikasi pengakses file. Sementara sebagian besar pertukaran data dilakukan dengan panggilan analog read
dan write
, membangun koneksi memerlukan lebih banyak informasi daripada hanya nama file. Misalnya, mendengarkan koneksi TCP mengambil dua langkah: satu dilakukan ketika server mulai mendengarkan, dan satu lagi dilakukan setiap kali klien terhubung. Langkah-langkah tambahan semacam itu tidak cocok dengan file API, yang merupakan alasan utama mengapa jaringan memiliki API sendiri.
Kelas perangkat lain yang biasanya tidak memiliki entri di /dev
Linux (tetapi ada pada beberapa varian unix lainnya) adalah adapter video. Pada prinsipnya, adapter video sederhana dapat diekspos sebagai perangkat framebuffer , yang dapat berupa perangkat blok yang terbuat dari blok yang mewakili warna setiap piksel. Adaptor video yang dipercepat dapat direpresentasikan sebagai perangkat karakter ke mana aplikasi mengirim perintah. Di sini, kelemahan dari antarmuka perangkat adalah lambat: aplikasi menampilkan (dalam praktiknya, server X) perlu melakukan panggilan kernel setiap kali menampilkan apa pun. Apa yang terjadi sebagai gantinya adalah bahwa server X sebagian besar menulis langsung ke memori adapter video, karena lebih cepat.