Kernighan 和 Pike 挑戰:如何在文件名中添加斜線?
我剛剛在Unix Programming Environment中遇到以下問題,這是 Kernighan 和 Pike 的經典 Unix 書籍(我在 1984 年版的第 79 頁找到了以下文本,ISBN:0-13-937699-2):
練習 3-6。(技巧問題)如何將 / 放入文件名(即 / 不分隔路徑的組件?
作為最終使用者和程序員,我多年來一直在使用 Linux,但我無法回答這個問題。沒有辦法在文件名中加上斜杠,核心絕對禁止這樣做。您可以通過塊設備訪問來修補文件系統,或者使用 Unicode 中外觀相似的字元,但這些都不是解決方案。
我知道 Linux ≠ Unix,但同樣的原則應該適用,因為系統必須能夠明確地從路徑中提取目錄層次結構。
有人知道,當問這個問題時,Kernighan 和 Pike 到底在想什麼?本來的答案是什麼?“訣竅”究竟是什麼?或者也許原始的 Unix 系統只是允許以某種方式逃避這個斜線?
升級版:
我就這個問題聯繫了 Brian Kernighan,他是這樣回答的:
答案是(或曾經是)“你不能”。
因此,蒂莫西·馬丁是對的,得到了綠勾。
也許答案與這個技巧問題中的部分答案相同:
你如何從大象身上下來? 你沒有。 你從鵝身上得到它。
摘自 Brian W. Kernighan 和 Rob Pike 的“程式實踐”,Ch。第 6 頁。158:
當 Steve Bourne 編寫他的 Unix shell(後來被稱為 Bourne shell)時,他創建了一個包含 254 個文件的目錄,這些文件的名稱只有一個字元,每個字節值一個,除了 ‘\0’ 和斜杠,這兩個字元不能出現在 Unix 文件名中。
我已經做到了。這是在 1980 年左右的某個時候在 PDP-11 上執行的 UNIX 系統上。我創建了一個名為“WhatXNow?”的文件。然後,我使用二進製文件“編輯器”來編輯磁碟設備,並將 inode 中的“X”更改為“/”(文件系統已解除安裝)。
受害者從來不知道如何刪除它。
編輯:哎呀,Barmar 是對的,我沒有看到關於不修補設備的行。是的,這是我編輯的目錄,而不是 inode。有一陣子了 :-)