Tôi đang tìm cách gọi một tiến trình con với một bộ mô tả tập tin được mở cho một đường ống đã cho để cuộc gọi open() không treo chờ phía bên kia của đường ống nhận kết nối.Thiết lập đường ống đọc từ các đường ống được đặt tên mà không bị chặn trong bash
Để chứng minh:
$ mkfifo /tmp/foobar.pipe
$ some_program --command-fd=5 5</tmp/foobar.pipe
Trong trường hợp này, some_program
không chạy cho đến khi một số quá trình có /tmp/foobar.pipe
mở cho ghi; tuy nhiên, some_program
có các hiệu ứng hữu ích ngay cả khi nó không nhận lệnh, vì vậy hành vi mong muốn là dành cho some_program
để được thực hiện ngay lập tức.
Cơ chế thực hiện điều này bằng cách thực hiện thông qua ngôn ngữ kịch bản thay thế (trăn, perl, v.v.) hoặc trình bao bọc C mở /tmp/foobar.pipe
với cờ O_NONBLOCK
là hiển nhiên; Tôi đang tìm một giải pháp tinh khiết, nên có thể.
bạn nói đúng là lỗi đánh máy. chỉ cần chỉnh sửa nó. Và có quá trình nền là xấu xí, đây là lý do tại sao tôi gọi nó là hack :) – Sec