カーニハンとパイクの挑戦:ファイル名にスラッシュを入れる方法は?


23

Unixプログラミング環境で次の質問に出会ったばかりです。KernighanとPikeのUnixに関する古典的な本(1984年版の79ページ、ISBN:0-13-937699-2で以下のテキストを見つけました):

演習3-6。(トリックの質問)ファイル名に/をどのように入力しますか(つまり、パスのコンポーネントを分離しない/ですか?

私はエンドユーザーおよびプログラマーとしてLinuxを長年使用していますが、この質問に答えることはできません。ファイル名にスラッシュを入れる方法はありません。カーネルによって絶対に禁止されています。ブロックデバイスアクセスを介してファイルシステムにパッチを当てたり、ユニコードの似たような文字を使用したりできますが、それらは解決策ではありません。

Linux≠Unixであることは理解していますが、システムはパスからディレクトリ階層を明確に抽出できる必要があるため、同じ原則を適用する必要があります。

この質問をする際に、カーニガンとパイクが正確に何を考えていたか、誰かが知っていますか?想定される答えは何でしたか?「トリック」とは正確には何ですか?それとも、元のUnixシステムでは、このスラッシュをどうにかしてエスケープできるのでしょうか。

UPD:

私は質問についてブライアン・カーニガンに連絡しました、そして、それは彼が答えたものです:

答えは「できない」です。

したがって、ティモシーマーティンは正しかったので、緑色のチェックマークが付きます。




うーん おそらく、小文字を含むファイルを作成して、ファイルaシステムがEBCDICロケールにあるとシステムに判断させることができますか?ASCIIは、aに相当の0x61である/(コード・ページ37)EBCDICに
フォックス

本自体はそれがトリックの質問だと言っていますか?もしそうなら、あなたはすでにあなたがすでに述べたすぐに使えるアイデアを残して、それを行うための設計上の方法を見つけることができないことをほぼ確認すると思います。
-ilkkachu

回答:


12

おそらく、答えはこのトリックの質問の答えの一部と同じ
です:象から降りる方法は? あなたはしません。 ガチョウから手に入れます。

ブライアン・W・カーニハンとロブ・パイクの「プログラミングの実践」より。6、ページ 158:

Steve BourneがUnixシェル(Bourneシェルと呼ばれるようになった)を書いていたとき、彼は254個のファイルのディレクトリを作成しました。 Unixファイル名には使用できません。


3
その冗談を教えてくれてありがとう。おそらく、英語の流encyさのテストとして機能します(これはちょうど失敗しました)。
ファイアグラフィク

あなたは正しかった。UPDを参照してください。
ファイアグラフィク

1
@firegurafiku はジョークを説明します。
アイザック

5

これをやった。これは、1980年頃のPDP-11で実行されているUNIXシステム上にありました。「WhatXNow?」というファイルを作成しました。次に、バイナリファイルの「エディタ」を使用してディスクデバイスを編集し、inodeで「X」を「/」に変更します(ファイルシステムはマウント解除されています)。

被害者は、それを削除する方法を理解しませんでした。

編集:おっと、バーマーは正しい、デバイスにパッチを適用しないことについての行が表示されなかった。そして、はい、それは私が編集したディレクトリであり、inodeではありません。久しぶりです:-)


1
ファイル名はiノードではなく、ディレクトリ特殊ファイルにあります。
バーマー

1
私は疑うfsckそれを削除しているだろう。
バーマー

1
質問は、ブロックデバイスアクセスを介してファイルシステムにパッチを適用するか、ユニコードの似たような文字を使用することができますが、それらは解決策ではありません。それはあなたの答えで説明していることではありませんか?
バーマー

@バーマー:うーん、多分私は質問を考え直していて、ファイルシステムにパッチを当てることが意図された解決策ですか?知りません。
ファイアグラフィク

これが答えだったに違いない。ディレクトリをいつ読むことができたか覚えています。おそらく何年も前にrootはそれらを書くことができました。
ジョシュア

1

/(より正確には、バイトではなく文字であり、値0x2fを持ち、ほぼすべてのUnixカーネルは意図的に文字エンコードを無視します)、生のディスクブロックが手動で操作されずにディレクトリエントリに到達するシナリオは間違いなくありませんカーネルのバグ。

このようなバグは時々発生します。パッチノートを読んだ覚えているケースの1つは、1990年代のいくつかの繰り返しです…Solarisと言いたいのですが、間違っているかもしれません…AppleTalk Filing Protocol(AFP)のサーバーを提供しました。 。問題は、古典的なMacOSでは/パス名コンポーネントを完全に許可することでした。:代わりにディレクトリ区切り記号が使用されます。AFPサーバーは、クライアントから送信されたパス名をそのディスク上のファイルにマッピングする場合と道徳的に同等であると想定ていましたtr :/ /:が、いくつかのコードパスを逃しました。

(上記の長いバージョンについては、comp.unix FAQ#2.2、「ファイル名に「/」が含まれている場合はどうなりますか?」で始まるサブセクションを参照してください。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.