Tôi muốn:Gửi tập tin ghi vào bộ đệm trong bộ nhớ (fopen một cái gì đó, nhưng viết để đệm, không đĩa)
- chuyển hướng stdout/stderr
- đến một bộ đệm trong bộ nhớ, chứ không phải hơn vào đĩa
- khi rời khỏi stdout/err chạy như bình thường
tôi biết làm thế nào để sử dụng dup2 và freopen tới:
- chuyển hướng stdout/err vào một tập tin của tôi lựa chọn
- khi rời khỏi stdout/err chạy như bình thường
... nhưng tôi không chắc chắn về mục 2?
REASON: Tôi muốn xử lý dữ liệu đi tới stdout/err (đến từ mã của bên thứ 3), sau đó gửi nó tới máy chủ web - trong khi vẫn để ứng dụng chạy như bình thường.
TẠI SAO? ... bởi vì ngay bây giờ khi ứng dụng của chúng ta chạy, chúng ta thấy dữ liệu quan trọng đi tới stdout (và err) từ mã của bên thứ 3, và đó là một PITA khiến người dùng cố gắng và lộn xộn xung quanh với logfiles cục bộ. Tôi muốn nắm bắt "N byte cuối cùng" vào một bộ đệm vòng, sau quá trình nó, và sau đó - iff có một vấn đề mà người dùng báo cáo - gửi cho máy chủ.
TẠI SAO S AV LỌC? ... vì đây là mã mà phải chạy trên iOS cũng như máy tính để bàn và "liên tục viết vào một tệp" là thứ tôi muốn tránh, vì tôi không muốn nó như một tệp. Ngoài ra ... Tôi phải lo lắng về việc duy trì tập tin đó, chủ động cắt tỉa kích thước của nó, v.v.
Bạn có thể sử dụng đường ống. Kiểm tra giải pháp này: http://stackoverflow.com/questions/955962/how-to-buffer-stdout-in-memory-and-write-it-from-a-dedicated-thread – arc
Một số Unix hoặc Posix có http : //pubs.opengroup.org/onlinepubs/9699919799/functions/fmemopen.html chức năng (lấy cảm hứng từ GNU). GNU cũng có http://linux.die.net/man/3/open_memstream có lẽ IOS của bạn có. –
Tại sao mọi người dường như không biết ổ cắm unix là gì? Tạo một, dup2 stdin/stdout bên thứ ba của bạn với nó, sử dụng mã của bạn để xử lý nó, không có đĩa liên quan. – tbert