Mengubah hala C STDOUT ke Fungsi Tersuai
Mengubah hala stdout ke fail ialah amalan biasa, tetapi bagaimana jika anda mahu mengubah hala ke fungsi yang anda takrifkan?
Sebagai contoh, pertimbangkan kes hipotetikal berikut:
<code class="cpp">void MyHandler(const char* data); // <Magical redirection code> printf("test"); std::cout << "test" << std::endl; // MyHandler should have been called with "test" twice at this point</code>
Penyelesaian
Seperti yang ditunjukkan oleh @Konrad Rudolph, mengubah hala stdout ke fungsi adalah mungkin menggunakan aliran ostring. Begini cara anda boleh melakukannya:
<code class="cpp">// Redirect cout. std::streambuf* oldCoutStreamBuf = std::cout.rdbuf(); std::ostringstream strCout; std::cout.rdbuf(strCout.rdbuf()); // This goes to the string stream. std::cout << "Hello, World!" << std::endl; // Restore old cout. std::cout.rdbuf(oldCoutStreamBuf); // Will output our Hello World! from above. std::cout << strCout.str();</code>
Walaupun kaedah ini berfungsi untuk cout, cerr dan clog, ia mungkin tidak mengubah hala semua stdout untuk fungsi seperti printf, yang biasanya menyasarkan kedua-dua aliran stdout dan stderr.
Untuk data yang lebih besar, teknik yang lebih maju seperti freopen(), setbuf(), dup(), dan dup2() boleh digunakan. Operasi ini memerlukan lebih sedikit pemahaman peringkat sistem dan mungkin melibatkan pembuatan paip atau memanipulasi deskriptor fail.
Atas ialah kandungan terperinci Bagaimana untuk mengubah hala C STDOUT ke Fungsi Ditentukan Pengguna?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!