每個腳本末尾都有“\0”嗎?

每個腳本末尾都有“\0”嗎?

我想知道你是如何確定腳本/文件的結尾的? 我對舊的 Unix 版本(如 V6)特別感興趣。

最後寫入的字元後面是否有“\0”?

答案1

即使是較舊的 Unix 下的用戶態程式也不會在檔案末尾看到“pad”位元組。我知道 MS-DOS 或 CP/M 會用 Ctrl-Z 字元填充磁碟區塊,因此檔案讀取演算法不僅必須檢查磁碟區塊結尾,還必須檢查填充位元組。

Unix 從來沒有做過這樣的事情。程式讀取字節,直到發生檔案結束條件,這對於read(2)系統呼叫意味著返回 0 read()errno計算到 EINTR,因此 Unix 傳統上也會在讀取某些設備時引入一些愚蠢的做法。

這一切也涉及檔案系統方面:Unix 檔案系統會將資料放入磁碟區塊中,並在 inode 中保留檔案大小(以位元組為單位)值。其他一些作業系統僅以區塊為單位保存檔案大小。如果資料小於區塊,問題就會蔓延到使用者空間,並出現填充位元組或其他無意義的情況。

答案2

不必要。 shell解釋器使用一些(或多或少複雜的)系統來呼叫包裝器(例如)來讀取帶有腳本的文件,read()並且fread()當它到達文件的最後一個位元組時,它將發出文件結束條件的信號(這不需要為零)。

相關內容