Các socket miền UNIX và FIFO có thể chia sẻ một phần triển khai của chúng nhưng về mặt khái niệm chúng rất khác nhau. Chức năng FIFO ở mức rất thấp. Một tiến trình ghi byte vào đường ống và một quá trình khác đọc từ nó. Ổ cắm tên miền UNIX có hành vi tương tự như ổ cắm TCP / IP.
Một ổ cắm là hai chiều và có thể được sử dụng bởi rất nhiều quá trình cùng một lúc. Một quy trình có thể chấp nhận nhiều kết nối trên cùng một ổ cắm và tham dự một số khách hàng cùng một lúc. Nhân cung cấp một bộ mô tả tệp mới mỗi lần connect(2)
hoặc accept(2)
được gọi trên ổ cắm. Các gói sẽ luôn đi đúng quy trình.
Trên một chiếc FIFO, điều này là không thể. Đối với sự kết hợp hai chiều, bạn cần hai FIFO và bạn cần một cặp FIFO cho mỗi khách hàng của mình. Không có cách viết hoặc đọc theo cách chọn lọc, bởi vì chúng là một cách nguyên thủy hơn nhiều để giao tiếp.
Ống vô danh và FIFO rất giống nhau. Sự khác biệt là các ống ẩn danh không tồn tại dưới dạng tệp trên hệ thống tệp nên không có quy trình nào có thể open(2)
. Chúng được sử dụng bởi các quy trình chia sẻ chúng bằng phương pháp khác. Nếu một quá trình mở một FIFO và sau đó thực hiện, ví dụ, a fork(2)
, con của nó sẽ kế thừa các mô tả tệp của nó và, trong số đó, đường ống.
Các ổ cắm tên miền UNIX, các đường ống ẩn danh và FIFO tương tự nhau trong thực tế chúng sử dụng các phân đoạn bộ nhớ dùng chung. Các chi tiết triển khai có thể thay đổi từ hệ thống này sang hệ thống khác nhưng ý tưởng luôn giống nhau: đính kèm cùng một phần bộ nhớ trong hai quá trình ánh xạ bộ nhớ riêng biệt để chúng chia sẻ dữ liệu
( chỉnh sửa: đó là một cách rõ ràng để thực hiện nó nhưng đó là không phải cách nó thực sự được thực hiện trong Linux, đơn giản chỉ sử dụng bộ nhớ kernel cho bộ đệm, xem câu trả lời của @ tjb63 bên dưới).
Nhân sau đó xử lý các cuộc gọi hệ thống và trừu tượng hóa cơ chế.