【續】linux C語言 文件描述符 讀寫地址分析

記錄日期:2014-10-23 20:08


日子背景:前些天在整理“智能相機人數統計”數據的存儲問題,由於對fopen打開方式的形式不是很瞭解,導致讀寫文件時一直異常,浪費了很多寶貴的時間,爲了避免相同的朋友走同樣的彎路,同時也警示自己不要犯同樣的錯誤,特此記錄,望對有需求的您有所幫助。


我在操作文件時,就是理解錯了a/a+的打開文件的原理。導致原本想保存一個指定最大值的文件大小的文件時,出現了,數據寫正確,但是讀出來的數據錯誤,文件也一直在增大。後來使用a + r+的方式綜合打開文件的:先用a的方式打開,然後立即關閉文件,保證了文件不存在時,會自動建立;然後馬上用r+的方式再此打開,保證了數據可以同時被讀 和 寫,且不要的數據可以結合fseek來覆蓋,即達到了,數據文件不會超過指定大小。


具體見下面對Linux手冊的對fopen的進一步詳解。


fopen():

       r :以只讀方式打開文件文件,前提是 該文件必須存在------>程序中只可對獲取到的文件描述符進行讀操作;


      r+:以可讀可寫的文件,前提是 該文件必須實現存在--------->程序中可對獲取到的文件描述符進行讀 或 寫 操作;


     w:以只寫方式打開文件,如文件已經存在,則會將源文件內容清空,若不存在,則會新建文件------------->在每次打開文件時,文件原來的內容會被刪除,程序只可對獲取到的文件描述符進行寫操作;


     w+:以可讀可寫方式打開文件,如果文件已經存在,則會將源文件內容清空,若不存在,則會新建文件------>在每次打開文件時,文件原來的內容會被刪除,程序可對獲取到 的文件描述符進行讀 和 寫操作;


    a:以附加方式打開只寫文件,如文件存在,則寫入的數據會被追加到文件尾,即源文件會被保存下來,若文件不存在,則會新建文件-------->附加的方式:是指不管如何對其文件如何操作,源文件的內容都會被保存下來,即使使用fseek移動寫入指針,原數據依然不會被覆蓋,新寫入的數據會被插入到原始數據之間,即數據會隨着寫入越來越大。

 

     a+:以附加方式打開可讀可寫文件,如文件存在,則寫入的數據會被追加到文件尾,即源文件被保存下來,若文件不存在,則會新建文件-------->附加的方式:是指不管如何對其 文件如何操作,源文件的內容都會被保存下來,即使使用fseek移動寫入指針,原數據依然不會被覆蓋,新寫入的數據會被插入到原始數據之間,即數據會隨着寫入越來大。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章