2009-11-19 46 views
5

Có cách nào để chuyển hướng đầu ra C++ bên trong mã không? Tình huống này, tôi đang sử dụng một số tệp .cpp và .h bên ngoài sử dụng printf để đặt cảnh báo cho bảng điều khiển. Tôi muốn chuyển hướng "chỉ" các kết quả đầu ra (không phải của tôi) vào một tập tin "mà không" sửa đổi mã của họ.C++ Đầu ra chuyển hướng

Vì vậy; trong chương trình của tôi, tôi có thể chuyển hướng ouput vào một tập tin, và khi tôi sẽ đặt một số chuyển hướng đầu ra một lần nữa để mặc định ... Điện thoại

Trả lời

7

Bạn có thể sử dụng freopen() trên stdout để chuyển hướng stdout sang tệp.

+0

1 để làm điều tuân thủ tiêu chuẩn (và di động). – DevSolar

+0

là nó bằng cách nào đó cho đến khi kết thúc chương trình? tôi cần phải bằng cách nào đó chuyển đổi nó trở lại để đưa vào giao diện điều khiển một lần nữa? –

1

printf sẽ in thành tệp mô tả 1, bạn có thể đóng tệp và mở tệp, điều này sẽ cung cấp cho bạn một fd khác, có thể 1 vì fd thấp nhất có sẵn, nếu không bạn không đủ nhanh.

Nếu bạn chỉ close(1); và sau đó int fd = open(file); fd phải là 1 nếu không có gì mở ra giữa nội dung đóng và mở. Tại thời điểm đó, bất kỳ ai xuất sang fd số 1 sẽ in ra tệp của bạn.

Điều này là do hệ thống sẽ cung cấp cho bạn lowest available file descriptor number để nó sẽ cung cấp cho bạn 1 đó chính xác là nơi printf viết.

Vì @roe đã đề cập, bạn có thể muốn thực hiện lệnh dup() trên 1 trước để nhận số fd khác, nơi bạn có thể in thành giá trị chuẩn.

+0

nếu bạn muốn tiếp tục in nội dung của riêng mình để stdout, bạn nên 'dup()' trước tiên. Sau đó, bạn có thể chuyển đổi qua lại với 'dup2()' nếu bạn muốn. – falstro

+0

hoặc ghi dữ liệu của riêng bạn trực tiếp vào fd bị lừa ... Tôi cho rằng điều đó thậm chí còn tốt hơn. vẫn cần phải lừa nó. – falstro

+0

Giả sử một hệ thống POSIX, tất nhiên, và thậm chí sau đó bạn đang làm những việc có thể nguy hiểm khi mở lại() hoàn toàn phù hợp với dự luật. Thư viện C và POSIX không pha trộn tốt. Tôi sẽ luôn giữ cách mở()/read()/write()/close() và fopen()/fread()/fwrite()/fclose() cách xa nhau. – DevSolar

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