如果我以文本模式而不是二進制模式打開文件,是否有區別?因爲我讀過UNIX和Linux沒有區分文本和二進制文件。文件訪問中的文本和二進制模式有什麼區別嗎?
回答
Linux上沒有什麼區別(至少在像Ext4這樣的本地文件系統上,在大多數其他文件系統上也是如此,用通常的GNU libc)。
也許一些奇怪的文件系統可能有一個特定的標誌來打開不同的二進制或文本文件。我不知道這樣的文件系統。也許你可以編寫一些FUSE文件系統做的區別,或許與一些額外的黑客周圍fopen
內離奇定製的libc
然而,C99 standard(至少第271頁,n1256草案§7.19.5.3)提到明確的文字VS二進制模式,因此如果符合標準,您的程序將更容易移植到其他系統(如Windows)。
所以我的意思是,你可能想嘗試傳遞一個模式字符串到fopen
區分二進制文本模式。 (我同意我不經常這樣做)。它不會受傷。
Linux的fopen(3)手冊頁明確地說:
模式字符串也可以包括字母「b」無論是作爲最後的 字符或在任何兩 字符的字符之間的字符上述字符串。這是嚴格爲 與C89兼容,並沒有影響;所有 符合POSIX標準的系統(包括Linux)都會忽略'b'。 (其他系統可能會以不同的方式處理 文本文件和二進制文件,如果您對二進制文件執行I/O操作,並且希望程序 可能會移植到非UNIX環境,那麼添加'b'可能會是一個好主意。 )
這裏的文件系統不相關。 FS使用塊。翻譯/解釋CR/LF(如果有的話)在libc級別完成。 (getc,fgets,fread,fseek(!)ftell(!),...) – wildplasser 2014-09-13 13:08:11
原則上你是對的,但我想有些FUSE文件系統可能會有不同的做法,例如將'\ r \ n'轉換爲'\ n' ....! – 2014-09-13 13:08:44
我不知道FUSE文件系統。 [不要以爲我想要。 *用火殺死它...... *] – wildplasser 2014-09-13 13:12:50
- 1. MD5二進制模式和文本模式有什麼區別?
- 2. 程序集文件,目標文件和二進制文件有什麼區別?
- 3. 訪問文件和打開文件有什麼區別
- 4. 十進制格式中的#。##和##。##模式有什麼區別?
- 5. ,那麼訪問以二進制模式的文本文件的一些優勢?
- 6. 二進制和文本文件在存儲方面的區別?
- 7. WebKit每晚構建二進制文件和Safari二進制文件有什麼區別?
- 8. .NET中的調試和發佈二進制文件有什麼區別?
- 9. 陷阱和模擬與二進制翻譯有什麼區別?
- 10. 文本和二進制文件有什麼區別。你如何決定何時使用什麼?
- 11. 二進制crossentropy和二進制crossentropy與keras中的logits有什麼區別?
- 12. debian包裝:dh build和dh二進制文件有什麼區別
- 13. cmd文件中%和%%有什麼區別?
- 14. C++ ifstream,ofstream:在二進制模式下,raw read()/ write()調用和打開文件有什麼區別?
- 15. 工會和文本有什麼區別?
- 16. 有沒有開源的二進制文件有區別?
- 17. .so和.lo文件有什麼區別?
- 18. io_submit和O_ASYNC文件有什麼區別
- 19. .bin和.dat文件有什麼區別?
- 20. .sqlite和.db文件有什麼區別?
- 21. apklib和jar文件有什麼區別?
- 22. XIB和NIB文件有什麼區別?
- 23. NSUserDefaults和.plist文件有什麼區別
- 24. .class和.dex文件有什麼區別?
- 25. .proto和.prototxt文件有什麼區別
- 26. 流和文件有什麼區別?
- 27. .htc和.js文件有什麼區別?
- 28. .out和.log文件有什麼區別
- 29. .so和.a文件有什麼區別?
- 30. MDB和SDF文件有什麼區別?
對於unix沒有區別。 (文本與二進制文件僅僅是一個微軟製品) – wildplasser 2014-09-13 12:39:50
不僅僅是,AFAIK它是在C99標準規範中。 – 2014-09-13 12:40:24
並非所有的「文本」文件*都會在CR/LF轉換時被正確讀取;只有那些以ASCII編碼的(或緊密派生或擴展)將會是。可以說,EBCDIC中編碼文本的文件是「文本文件」,所以這至少需要對使用的編碼進行一些定義。此外,CR/LF轉換可能會混淆16位Unicode文本文件。人們可以說一個單獨的「文本模式」已經被有效地廢棄了。 – usr2564301 2014-09-13 13:19:51