Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk mengubah hala C STDOUT ke Fungsi Ditentukan Pengguna?

Bagaimana untuk mengubah hala C STDOUT ke Fungsi Ditentukan Pengguna?

DDD
Lepaskan: 2024-11-01 01:04:02
asal
255 orang telah melayarinya

How to Redirect C   STDOUT to a User-Defined Function?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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