Bagaimana untuk Menangkap Output Stdout/Stderr sebagai Rentetan dalam C?

DDD
Lepaskan: 2024-11-03 04:44:30
asal
917 orang telah melayarinya

How to Capture Stdout/Stderr Output as a String in C  ?

Mengubah hala Stdout/Stderr ke String

Walaupun mengubah hala stdout/stderr ke fail adalah amalan biasa, terdapat senario di mana menangkap output sebagai rentetan adalah lebih sesuai. Dalam artikel ini, kami akan meneroka cara untuk mencapai ini menggunakan perpustakaan C standard.

Menggunakan Stringstream

Satu pendekatan ialah memanfaatkan kelas std::stringstream. Dengan mengalihkan stdout/stderr ke objek rentetan, anda boleh menangkap output sebagai rentetan. Berikut ialah contoh:

<code class="cpp">std::stringstream buffer;
std::streambuf *old = std::cout.rdbuf(buffer.rdbuf());

std::cout << "Bla" << std::endl;

std::string text = buffer.str(); // text will now contain "Bla\n"</code>
Salin selepas log masuk

Kod ini mula-mula mencipta aliran rentetan dan menetapkan penimbalnya kepada cout. Sebarang keluaran seterusnya kepada cout akan ditangkap oleh aliran rentetan. Selepas ubah hala selesai, anda boleh mengakses teks yang ditangkap menggunakan kaedah str() aliran rentetan.

Menggunakan Kelas Pengawal

Untuk memastikan penimbal adalah sentiasa menetapkan semula dengan betul, anda boleh membuat kelas pengawal. Berikut ialah contoh:

<code class="cpp">struct cout_redirect {
    cout_redirect( std::streambuf *new_buffer ) 
        : old( std::cout.rdbuf( new_buffer ) )
    { }

    ~cout_redirect( ) {
        std::cout.rdbuf( old );
    }

private:
    std::streambuf *old;
};</code>
Salin selepas log masuk

Kelas cout_redirect membenarkan anda mengubah hala stdout/stderr buat sementara waktu dalam skopnya. Apabila objek kelas ini dicipta, penimbal lama disimpan. Selepas pemusnahannya, penimbal lama dipulihkan.

Dengan menggunakan teknik ini, anda boleh menangkap output stdout/stderr dengan mudah sebagai rentetan, memberikan fleksibiliti dalam mengurus output dalam aplikasi C anda.

Atas ialah kandungan terperinci Bagaimana untuk Menangkap Output Stdout/Stderr sebagai Rentetan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan