2013-09-02 59 views
35

Tôi tìm thấy một vài câu trả lời, nhưng chúng dường như liên quan cụ thể đến các máy Windows. Vì vậy, câu hỏi của tôi là sự khác biệt giữa ống và ổ cắm là gì, và khi nào/bạn nên chọn cái nào so với ống kia?Sự khác nhau giữa ống và ổ cắm là gì?

Trả lời

48

sự khác biệt giữa ống và ổ cắm là gì và khi nào/bạn nên chọn cái khác như thế nào?

Cả hai ống và ổ cắm xử lý các luồng byte, nhưng họ làm điều đó theo những cách khác nhau ...

  • ống chỉ tồn tại trong một host cụ thể, và họ đề cập đến đệm giữa các tập tin ảo, hoặc kết nối đầu ra/đầu vào của các quy trình trong máy chủ đó. Không có khái niệm về các gói trong đường ống.
  • ổ cắm đóng gói thông tin liên lạc bằng IPv4 hoặc IPv6; giao tiếp đó có thể mở rộng ra ngoài localhost. Lưu ý rằng các điểm cuối khác nhau của một socket có thể chia sẻ cùng một địa chỉ IP; tuy nhiên, họ phải lắng nghe trên các cổng TCP/UDP khác nhau để làm như vậy.

Cách sử dụng:

  • Sử dụng ống:
    • khi bạn muốn đọc dữ liệu/ghi như một tập tin trong một máy chủ cụ thể. Nếu bạn đang sử dụng C, bạn read()write() vào một đường ống.
    • khi bạn muốn kết nối đầu ra của một quá trình đầu vào của quá trình khác ... thấy popen()
  • Sử dụng socket để gửi dữ liệu giữa các thiết bị đầu cuối IPv4/IPv6 khác nhau. Rất thường xuyên, điều này xảy ra giữa các host khác nhau, nhưng ổ cắm có thể được sử dụng trong cùng một máy chủ

BTW, bạn có thể sử dụng netcat hoặc socat để tham gia vào một ổ cắm vào một đường ống.

8

Để hoàn thành câu trả lời được đưa ra bởi Mike, điều quan trọng là phải đề cập đến sự tồn tại của ổ cắm miền UNIX, có sẵn trên bất kỳ hệ điều hành tuân thủ POSIX nào. Mặc dù rất giống với các socket internet "bình thường" về ngữ nghĩa sử dụng, chúng hoàn toàn là cục bộ cho máy (tất nhiên các ổ cắm internet cũng có thể hoạt động cục bộ), và do đó gần như hoạt động như một đường ống. Hầu hết, vì một ống UNIX theo định nghĩa một chiều:

Ống và FIFO (còn được gọi là đường ống có tên) cung cấp một kênh truyền thông interprocess hai chiều . Một đường ống có đầu đọc và ghi kết thúc . Dữ liệu được ghi vào đầu ghi của một đường ống có thể được đọc từ phần cuối của đường ống được đọc là . (Trích đoạn từ man page pipe(7))

UNIX socket miền cũng có một tính năng rất khác thường, như bên cạnh dữ liệu, họ cũng cho phép gửi file descriptor: Bằng cách này, một quá trình không có đặc quyền có thể truy cập bất kỳ tập tin có mô tả đã được gửi đi qua ổ cắm. Kỹ thuật này, theo Wikipedia, được sử dụng bởi trình quét da quét virus ClamAV.

Các vấn đề liên quan