標準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...