Tôi có một ứng dụng C với nhiều chuỗi công nhân. Điều quan trọng là chúng không bị chặn, do đó các luồng công nhân cần phải ghi vào một tệp trên đĩa, tôi đã ghi chúng vào một bộ đệm tròn trong bộ nhớ, và sau đó có một luồng chuyên dụng để ghi bộ đệm đó vào đĩa.Làm thế nào để đệm bộ đệm trong bộ nhớ và ghi nó từ một chủ đề chuyên dụng
Chuỗi công việc không chặn nữa. Chuỗi chuyên dụng có thể chặn một cách an toàn khi ghi vào đĩa mà không ảnh hưởng đến chuỗi công việc (nó không giữ khóa khi ghi vào đĩa). Bộ đệm bộ nhớ của tôi được điều chỉnh đủ lớn để chuỗi ghi có thể theo kịp.
Tất cả đều hoạt động tốt. Câu hỏi của tôi là, làm thế nào để thực hiện một cái gì đó tương tự cho stdout?
Tôi có thể printf() để viết vào bộ đệm bộ nhớ, nhưng tôi không có quyền kiểm soát tất cả mã có thể ghi vào stdout (một số trong thư viện của bên thứ ba).
Suy nghĩ? NickB
Tất cả các giải pháp ở đây đều sai, bởi vì việc ghi vào đường ống có thể chặn. (Và nếu bạn đặt chúng là nonblocking, 'FILE' sẽ chỉ nhận được trong trạng thái lỗi không thể khôi phục nếu nó sẽ chặn khi nó cần tuôn ra.) –