事情是這樣的,我在linux 下用C語言編寫了一個小程序,對二進制文件進行復制。方法是fopen()一個二進制文件,然後用fread()讀取一部分數據寫到另一個新建的二進制文件中,直到復制完成。結束後我對兩個文件進行對比,發現副本比原件小100多個字節,查看各個段的大小也沒發現什麼不同,但是最後的總大小就是不一樣。而且對副本chmod()之後,同樣能夠運行。
著是怎麼回事呢??
不論讀寫文件,在fopen時需要用二進制形式打開,參數不要只用"r",用"rb"
如果你的原文件是在Windows下編輯的(如用記事本),那麼它的換行實際上是兩個字符'\r'+'\n'
但在Linux下,文件的換行則是'\n'
如果你不用二進制處理,則會自動轉換這個換行符號,估計你的源文件有100多行,所以copy後少了100多個字節。