日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++基础教程示例详解:C++中的I/O重定向

發布時間:2023/12/2 c/c++ 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++基础教程示例详解:C++中的I/O重定向 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在C語言中,我們可以使用函數freopen()將現有文件指針重定向到另一個流。freopen()的原型如下

FILE * freopen ( const char * filename, const char * mode, FILE * stream );

例如,要將stdout重定向為文本文件,我們可以編寫

freopen ("text_file.txt", "w", stdout);

雖然在C++中仍然支持這種方法,但本文將討論另一種重定向 I/O streams的方法。

C++作為一種面向對象的編程語言,不僅使我們能夠定義自己的流,而且還可以重定向標準流。因此,在C++中,流是一個對象,其行為由類定義。因此,任何表現得像流的東西都是流。

C++中的流對象主要有三種類型:

  • istream : 此類型的流對象只能從流執行輸入操作

  • ostream :?這些對象只能用于輸出操作。

  • iostream : 可以同時用于輸入和輸出操作

顧名思義

i代表輸入input

o代表輸出output

stream//流

iostream//輸入輸出流,這只是C++的一個流文件,因為C++的輸入輸出都是流處理的

istream//就是只管輸入的流

ostream//就是只管輸出的流

(理論上應該是iostream包含了istream和ostream。但是如果只想使用ostream中的某個功能卻使用了這個iostream,而iostream比較大,又包含了istream,那么這樣的調用會浪費資源)

所有這些類以及文件流類都派生自以下類:ios和streambuf。因此,filestream和IO流對象的行為類似。

所有流對象還具有類streambuf的關聯數據成員。簡單地說,streambuf對象是流的緩沖區。從流中讀取數據時,我們不會直接從源中讀取數據,而是從鏈接到源的緩沖區中讀取數據。同樣,首先在緩沖區上執行輸出操作,然后在需要時刷新緩沖區(將其寫入物理設備)。

C++允許我們為任何流設置流緩沖區。因此,重定向流的任務只不過是更改與流相關聯的流緩沖區。因此,我們需要將流A重定向到流B

  • 獲取A的流緩沖區并將其存儲在某處

  • 將A的流緩沖區設置為B的流緩沖區

  • 如果需要,將A的流緩沖區重置為其先前的流緩沖區

  • 我們執行重定向操作使用ios::rdbuf()方法。對于這個方法,如果不傳參數,那么直接返回流對象的buffer指針。如果傳遞了某個流對象的buffer指針,那么將當前的流對象綁定到那個傳遞過來的流對象的buffer上。

    我們可以使用函數 ios::rdbuf()來執行兩次操作。

    1) stream_object.rdbuf(): 返回流對象buffer
    2) stream_object.rdbuf(streambuf * p): 綁定流對象buffer

    下面是一個演示步驟的示例程序

    // Cpp程序將cout重定向到文件 #include #include #include using namespace std; int main() { fstream file; file.open("cout.txt", ios::out); string line; // cout的備份流緩沖區streambuf* stream_buffer_cout = cout.rdbuf(); streambuf* stream_buffer_cin = cin.rdbuf(); // 獲取文件的streambuffer streambuf* stream_buffer_file = file.rdbuf(); // 將cout重定向到文件cout.rdbuf(stream_buffer_file); cout << "Linux迷www.linuxmi.com這行寫入文件" << endl; // 將cout重定向回屏幕cout.rdbuf(stream_buffer_cout); cout << "www.linuxmi.com這一行被寫入屏幕" << endl; file.close(); return 0; }

    屏幕輸出:

    www.linuxmi.com這一行被寫入屏幕

    下面這一行將寫入文件
    Linux迷www.linuxmi.com這行寫入文件

    注意:

    以上步驟可以壓縮為一個步驟

    auto cout_buf = cout.rdbuf(file.rdbuf())

    // 設置流緩沖區和返回先前的
    streambuffer back to cout_buf

    OK,本文就這樣,有什么不對的地方請指正。

    來源:https://www.linuxmi.com/io-redirection-c.html

    總結

    以上是生活随笔為你收集整理的C++基础教程示例详解:C++中的I/O重定向的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。