Trên nhiều thiết bị, các hoạt động chính là gửi byte từ máy tính đến thiết bị ngoại vi hoặc nhận byte từ thiết bị ngoại vi trên máy tính. Các thiết bị như vậy tương tự như đường ống và hoạt động tốt như các thiết bị nhân vật . Đối với các hoạt động không đọc và ghi (chẳng hạn như điều khiển luồng trên dòng nối tiếp), thiết bị cung cấp các lệnh đặc biệt gọi là ioctl .
Một số thiết bị rất giống với các tệp thông thường: chúng được tạo từ một số byte hữu hạn và những gì bạn viết ở một vị trí nhất định sau đó có thể được đọc từ cùng một vị trí. Các thiết bị này được gọi là thiết bị khối .
Giao diện mạng phức tạp hơn: những gì họ đọc và ghi không phải là byte mà là các gói. Mặc dù vẫn có thể sử dụng giao diện thông thường với read
và write
, nhưng sẽ rất khó xử: có lẽ mỗi cuộc gọi write
sẽ gửi một gói và mỗi cuộc gọi read
sẽ nhận một gói (và nếu bộ đệm quá nhỏ để gói phù hợp, gói sẽ bị mất).
Giao diện mạng có thể tồn tại như các thiết bị chỉ cung cấp ioctl
. Trong thực tế, đây là những gì một số biến thể unix làm, nhưng không phải Linux. Có một số lợi thế cho phương pháp này; ví dụ, trên Linux, giao diện mạng có thể tận dụng udev . Nhưng những lợi thế còn hạn chế, đó là lý do tại sao nó chưa được thực hiện.
Hầu hết các ứng dụng liên quan đến mạng không quan tâm đến các giao diện mạng riêng lẻ, chúng hoạt động ở mức cao hơn. Ví dụ: trình duyệt web muốn tạo kết nối TCP và máy chủ web muốn lắng nghe kết nối TCP. Với mục đích này, những gì sẽ hữu ích là các thiết bị cho các giao thức mạng cấp cao, ví dụ:
{ 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
Trong thực tế, ksh và bash cung cấp giao diện như vậy cho các máy khách TCP và UDP. Tuy nhiên, nói chung, các ứng dụng mạng phức tạp hơn các ứng dụng truy cập tệp. Trong khi hầu hết các trao đổi dữ liệu được thực hiện với các cuộc gọi tương tự read
và write
, việc thiết lập kết nối đòi hỏi nhiều thông tin hơn chỉ là một tên tệp. Ví dụ, việc lắng nghe các kết nối TCP cần hai bước: một bước được thực hiện khi máy chủ bắt đầu nghe và một bước sẽ được thực hiện mỗi khi máy khách kết nối. Các bước bổ sung như vậy không phù hợp với API tệp, đó là lý do chính tại sao mạng có API riêng.
Một loại thiết bị khác thường không có mục /dev
trên Linux (nhưng trên một số biến thể unix khác) là bộ điều hợp video. Về nguyên tắc, các bộ điều hợp video đơn giản có thể được hiển thị dưới dạng các thiết bị bộ đệm khung , có thể là các thiết bị khối được tạo thành từ các khối đại diện cho màu của từng pixel. Bộ điều hợp video được tăng tốc có thể được biểu diễn dưới dạng thiết bị ký tự mà ứng dụng gửi lệnh. Ở đây, nhược điểm của giao diện thiết bị là chậm: ứng dụng hiển thị (trong thực tế, máy chủ X) sẽ cần thực hiện các cuộc gọi kernel bất cứ khi nào hiển thị bất cứ điều gì. Điều xảy ra thay vào đó là máy chủ X chủ yếu ghi trực tiếp vào bộ nhớ của bộ điều hợp video, vì nó nhanh hơn.