2009-03-16 33 views
7

Tôi đã tạo một đường ống và tôi đã sử dụng dup2() để ghi đè các luồng 1 & 2 (stdout & stderr) vào các đường ống đó.Làm thế nào tôi có thể sử dụng fprintf và ghi vào một đường ống?

Bây giờ tôi muốn sử dụng fprintf để ghi vào luồng 1 hoặc 2, nhưng chương trình của tôi dường như không nhận được bất cứ điều gì ở phía bên kia của đường ống. Tôi đã thử bằng cách sử dụng printf(), nhưng tôi không chắc chắn nếu điều này viết cho stdout hoặc dòng 1 theo mặc định. Nếu nó ghi vào luồng 1, tôi đoán đó là vấn đề ở đâu đó sâu hơn trong mã của tôi.

Về cơ bản tôi hỏi, được cung cấp một int đại diện cho luồng, làm thế nào tôi có thể nhận được một FILE * phù hợp để sử dụng trong fprintf()?

Trả lời

6

Nếu bạn có một bộ mô tả tập tin và muốn có một FILE*, bạn có thể sử dụng fdopen

FILE *fdopen(int fd, const char *mode); 

fdopen là một chức năng Posix và tài liệu trong man fdopen. Để làm ngược lại, bạn có thể sử dụng fileno

+0

Bạn có đóng trình mô tả, con trỏ FILE, một trong hai hoặc cả hai? – Bernard

+0

Bộ mô tả tệp vẫn mở cho đến khi bạn đóng luồng, tại thời điểm đó nó sẽ đóng bộ mô tả tệp theo manpage. –

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