簡體   English   中英

C ++,協作FILE *和std流

[英]C++, cooperating FILE* and std streams

我需要在C ++項目中使用現有的C庫。 我的問題是C現有庫使用FILE *作為流,是否存在使用FILE *流放入或從C ++流獲取的標准兼容方法?

我嘗試在C ++ 11標准中尋求FILE *,但僅在很少的示例中出現。

 -

編輯,例如。
我們有一個寫入FILE *的函數:
fputs(char const *,FILE *)

我們有一個輸出C ++流:
auto strm = std :: cout;

我可以以符合標准的方式使用fputs寫入strm嗎?

您還可以考慮一個類似的帶有C函數的輸入示例,該函數從FILE *和輸入C ++流中讀取。

檢查這個答案,

https://stackoverflow.com/a/5253726/1807864

#include <cstdio>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
ofstream ofs("test.txt");
ofs << "Writing to a basic_ofstream object..." << endl;
ofs.close();

int posix_handle = ::_fileno(::fopen("test.txt", "r"));

ifstream ifs(::_fdopen(posix_handle, "r")); // 1

string line;
getline(ifs, line);
ifs.close();
cout << "line: " << line << endl;
return 0;
}

除了極少數例外,C ++標准說所有C功能都包括在內。 當然,所有標准的C FILE *功能均受支持[顯然受平台上對FILE *一般支持-總體上講,沒有“文件”(例如,沒有存儲空間)的嵌入式系統幾乎沒有任何有用的支持用於FILE * -C ++樣式fstreamfstream使用]。

因此,只要您不嘗試同時將來自C ++ fstream和C FILE *讀/寫操作混合到同一文件中,它就可以正常工作。 但是,您將需要在C ++和C訪問之間關閉文件。

據我了解,這樣做是非便攜式且非標准的 它是否在實踐中起作用是另一個問題。 我會在舊代碼周圍創建包裝器類,或者像在C語言中一樣直接使用FILE *流-它們還不錯。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM