IO庫的一些知識

2021-06-09 13:15:34 字數 1511 閱讀 5528

標準io庫型別和標頭檔案

iostream 對流進行讀寫

fstream 對檔案進行讀寫

sstream 對string物件進行讀寫

一.io物件不可複製或賦值

eg:ofstream out1,out2;

out1=out2; // error : cannot assign stream objects

//print functions:parameter is copied

ofstream print(ofstream)

out2=print(out2); // error: cannot copy stream objects

這裡要求有兩種特別重要的含義,只有支援複製的元素型別可以儲存在vector或其他容器型別裡,由於流物件不能複製,因此不能儲存在vector(或其他)容器中,即不存在儲存流物件的vector或其他容器)

第二個含義是:形參或返回型別也不能為流型別,如果需要傳遞或返回io物件,則必須傳遞或返回指向該物件的指標或引用: //ps: 函式的形參為指標時,此時複製的是實參的指標,而不是本身。

ofstream &print(ofstream&); //ok: take a rerferce,no copy;

while(print(out2)) // ok: pass referce to out2

一般情況下,如果要傳遞io物件以便對它進行讀寫,可用非const引用的方式的方式傳遞這個流物件,對io物件的讀寫會改變它的狀態,因此引用必須是非const的。

二,流狀態的查詢和控制

可用管理如下輸入操作

int ival;

//read cin and test only for eof:loop is executed even if there are other io failures) 讀取cin而且僅僅測試是否為eof錯誤,即使cin錯誤也是可用執行的

while(cin>>ival,!cin.eof())

if(cin.bad())

throw runtime_error(" io stream corrupted");

if(cin.fail())

cerr<<" bad data,try again":

cin.clear(istream::failbit);

continue;

// ok to process ival;

這個迴圈不斷讀入cin,直到到達檔案結束符或者發生不可恢復的讀取錯誤為止,迴圈條件使用了逗號操作符,首先計算它的每乙個運算元,然後返回最右邊運算元作為整個操作的結果,因此,迴圈條件唯讀入cin而忽略了其結果,該條件的結果是!cin.eof()的值,如果cin到達了檔案的結束符,條件則為假,退出迴圈,否則不管怎樣將進入迴圈。

在迴圈中,先檢查流是否被損壞,如果是的話,丟擲異常並退出迴圈,如果輸入無效,則輸出警告並清除failbit狀態,在本例中,執行continue語句回到while的開頭,讀入另乙個值給ival,如果沒有出現任何錯誤,那麼迴圈體餘下的部分即可正常的使用ival。

三。緩衝區的管理

一些關於Linux庫的知識

庫就目標檔案的集合,我們把不需要公升級更新維護的 打包合併在一起方便使用,也可以對源 進行保密。靜態庫在使用時是把被呼叫的 複製到呼叫模組中,然後在執行程式時,靜態庫就不需要了。靜態庫的執行速度快,但占用空間大,當庫中的內容發生變化時,需要重新編譯出新的程式,因此不能輕易修改庫中的內容。而共享庫只是...

C C POSIX 的一些 IO 操作

對檔案的操作,讀檔案至記憶體,從記憶體寫至檔案 讀檔案至記憶體buf中 void fread 將記憶體 buf 中的內容寫入開啟的檔案 fp 中 void fwrite 將fp 換為 stdin 輸入至 buf 中 void fscanf c 檔案流,輸入至記憶體中,由於流遇到空格等空白符停止所以需...

I O的一些簡單操作

i o 流 stream 是供資料傳輸的通道 位元組流 通用的 inputstream 父類 fileinputstream outputstream 父類 fileoutputstream 操作流的步驟 a 產生位元組流物件 b 呼叫讀寫方法 c 關閉流 2.publicvoidcopyimage...