Dalam konteks pengaturcaraan ini, kami menyasarkan untuk menulis data terus ke penimbal sedia ada menggunakan standard I /O aliran. Mari kita terokai cara untuk mencapai ini dengan kaedah pubsetbuf().
Kaedah pubsetbuf() dalam streambuf, iaitu kelas asas untuk penimbal strim dalam perpustakaan standard C , membolehkan kami menyediakan penimbal yang diperuntukkan secara luaran kepada strim. Walau bagaimanapun, dalam pelaksanaan pustaka standard Microsoft Visual Studio 2008, kaedah ini tidak melaksanakan sebarang tugasan penimbal.
Untuk memintas isu ini, kami boleh mencipta pelaksanaan streambuf tersuai yang memulakan penunjuk dalamannya untuk menghala ke penimbal yang diberikan. Berikut ialah streambuf templat yang mencapai ini:
template <typename char_type> struct ostreambuf : public std::basic_streambuf<char_type, std::char_traits<char_type>> { ostreambuf(char_type* buffer, std::streamsize bufferLength) { // Initialize internal buffer pointers to the provided buffer setp(buffer, buffer + bufferLength); } };
Menggunakan streambuf tersuai kami, kini kami boleh mengubah suai kod kami untuk menulis terus ke penimbal luaran:
void FillBuffer(char* buffer, unsigned int size) { ostreambuf<char> ostreamBuffer(buffer, size); std::ostream messageStream(&ostreamBuffer); messageStream << "Hello" << std::endl; messageStream << "World!" << std::endl; }
Pendekatan ini menulis data dengan berkesan ke penimbal yang diberikan tanpa penyalinan perantaraan, sebagai dikehendaki.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menulis Terus kepada Penampan Bekal Pengguna Menggunakan C Standard Streams?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!