Tôi đã loay hoay với việc này để hoạt động được một thời gian, vì vậy tôi nghi ngờ một số hiểu lầm cơ bản về cách thức hoạt động của đường ống là nguyên nhân gốc rễ của những rắc rối của tôi.
Mục tiêu của tôi là khởi tạo kết nối TCP đến một số máy chủ từ xa thông qua netcat
và có hai đường dẫn được đặt tên trên hệ thống tệp: một đường dẫn có thể đọc từ đó để lấy dữ liệu đến và các đường dẫn khác có thể ghi vào dữ liệu gửi đi. Tôi hiện đang sử dụng các cấu trúc sau:
mkfifo in
mkfifo out
cat out | netcat foo.bar.org 4000 > in &
Từ đây, tôi muốn cho phép các quá trình khác đọc và ghi vào / từ kết nối TCP mở này. Điều này "chỉ hoạt động", hoặc có một lý do tại sao một cấu trúc như thế này không thể làm việc?
Điều dường như xảy ra hiện tại là tôi có thể đọc out
mà không gặp vấn đề gì, nhưng khi tôi viết thư cho in
tôi nhận được kết quả đề cập đến một đường ống bị hỏng và tất cả các giao tiếp tiếp theo dường như đã chết. Suy nghĩ?
(Liên quan: Ban đầu tôi sử dụng:
netcat foo.bar.org 4000 < out > in &
nhưng tìm thấy nó để chặn chờ đầu vào. Tôi cũng tò mò về điều này, nhưng có lẽ nó được giải quyết tốt hơn trong một câu hỏi riêng.)
write(stdout): Broken pipe
sau (hoặc ngay sau đó) viết vàoout
đường ống.