現在の(。)および親(..)ディレクトリの技術用語は何ですか?


20

私は、ファイル名に渡されたかどうかのチェックがあるという機能を持って.たり..。しかし、適切な名前を付ける方法がわかりません。IsCurrentOrParentDirectory()関数はフルパスではなくファイル名を使用するため、そのようなものはあいまいです。(直観的には、仲間のプログラマーは/usr/、私が入っている間に/usr/戻ることを期待trueしますが、実際にはそうではありません。)

これらのディレクトリエントリに技術用語はありますか?ある場合、それは何ですか?


1
。および..はファイル名ではなく、フォルダです。入力が有効なファイルであるかどうかだけをチェックしてみませんか(stat()に基づくタイプはIF_REGです)?PSこれはおそらくStackOverflowに適しています
トニー14

7
@Tonny ... 、POSIX標準に従ったファイル名です。以下の引用を参照してください。一般的なコンピューティングの概念に関するものなので、ここでいいと思います。
slhck 14

私の言葉遣いが再びあいまいだったことを認めなければなりません。関数は(単一のファイルまたはディレクトリ名を取りfoo.barfooパス...、)ではなく(foo/bar/foo/、...)。ただし、ディレクトリ、リンクなどもファイルなので、そのままにしておきます。
マックストルシャ14

@slhck POSIXはそれをファイルと呼びますが、どのファイルシステムオブジェクトに対してもそれを行います。POSIXの用語では、ファイルは通常「ファイルシステムオブジェクト」の略語として読む必要があります。初期のUnixでは、実際にファイルが保存されるすべてのFSOが派生しますが、これは一部の最新の実装には当てはまりません。-おそらく、コメントに「有効なファイル」ではなく「通常のファイルです」と書いておく必要がありますが、とにかくMax Truxaのコメントはそれを論点にします。
トニー14

回答:


23

POSIX標準から:

特別なファイル名のドットは、その前身によって指定されたディレクトリを参照するものとします。特別なファイル名のドット-ドットは、その前のディレクトリの親ディレクトリを参照します。特別な場合として、ルートディレクトリでは、ドットドットはルートディレクトリ自体を指す場合があります。

あなたはファイル名があるかどうかを確認したいのであれば、本当に、.または..あなたはそれを呼び出す必要がありますIsDotOrDotDot()、または、パス名の解決のPOSIXの用語を使用して、IsPredecessorOrParentOfPredecessor()または多分PointsToPredecessorOrParentOfPrecedessor()...あなたのアイデアを得ます。問題は、後者の用語が完全なパス名を見た場合にのみ意味をなすことです。しかし、とにかく誰もそれを理解しません。

それが有効なファイル名であること.を考慮すると..(解釈が異なるだけです)、内部的に呼び出される方法ではなく意味に依存して、自分の持っているものに固執する必要があります。


ある.bash_historyドットドットか?その関数名が、OPが提案したオープンよりも説明的なものかどうかはわかりません。
イェンスエラ14

@JensEratそれは問題とは無関係です。質問は、ファイル名の構成要素があったかどうかだった...、そしてそれだけで起動していないかどうか.。もちろん、OPの関数名はよりわかりやすいものです。私は彼にそれがどのように技術的に言及されているかを指摘していた。
slhck 14

2
確かにそうですが、IsDotOrDotDot()関数が何をしているかについてはほとんど何も言いません。
イェンスエラ14

「先行」とは、パス指定でその直前のパス要素を指します。ディレクトリ内のエントリの名前だけを見ている場合は、「現在」または「親」という用語が適しています。
サイモンリヒター14

2
@JensEratを使用しますIsDotOrDotDot。ファイルシステムの概念に精通している人なら誰でもすぐに理解できます。.bash_history「ドット」の意味についてはコンテキストが提供されないため、「ドット」であるかどうかは議論の余地がありますが、「ドットまたはドットドット」ではありません。
キノキジュフ

4

.そして..、通常のような絶対的なもの対相対パスを記述するために使用されます/usr。この違いを使用して、関数をとして宣言しますIsRelativeCurrentOrParentDirectory()

ドット参照はパスのどこでも発生する可能性があることに注意してください。どう/usr/local/..


関数がフルパスではなくファイル名のみを使用することを指摘できませんでした。それに応じて質問を更新しました。
マックストルシャ14

2

slhck♦便利に引用されたPOSIX標準は、

特別なファイル名のドットは…を参照するものとします。  特別なファイル名ドットドットは…を参照するものとします。

(強調を追加)。そのため、厳密には技術的ではありませんが、「特別なファイル名」が正式な名前であるように見えます。ユーザーは、おそらくあなたがあなたの関数次のいずれかを呼び出した場合、それを理解するであろう: IsSpecialDirectory()IsSpecialFilename()、または単にIsSpecialName()

それとも、一緒に行くことができIsStandardDirectory()IsStandardFilename()またはIsStandardName()。これは、自動的に確立されるもの(この場合はby mkfsおよびmkdir)のUnix命名規則(標準入力、標準出力)に従います。  IsAutomatic…()またはIsDefault…()、一方で、おそらく十分に直感的ではありません。


実際に私が取った最初の名前はIsMagicDirectory()それに近いものでしたが、あなたの言葉遣いははるかに直感的で適切だと思います(特に確立された命名規則を使用しているため)。を使用IsSpecialFileNameすると、関数がパスではなく単一のファイル(またはディレクトリ、リンクなど)の名前を受け取ることも明確になります。
マックストルシャ14

良い提案。ただし、「特殊」にはおそらくリンク、FIFOなども含まれるでしょう。
slhck 14

@slhck:はい、デバイス(たとえば、ディスクやtty)は「特殊ファイル」と呼ばれます。そして、はい、この用語は、シンボリックリンク、FIFO、およびファイルシステムの他の異国人-「通常のファイル」以外のあらゆるタイプのファイル(iノード)に大まかに適用できます。(はい、ディレクトリもこのバケツに分類されます。)したがってIsSpecialFile()、悪い提案でした。しかし、私はそれを提案しませんでした。私は提案したIsSpecialFilename()。名前ながらsda1consolekmemmyfifourandom示唆している、彼らは予約されていないと、本質的に特殊なものではありません。しかし.、と..は本質的に特別なファイル名です。
スコット14

1

* nixの世界で知っている唯一の用語はCWD、Current Working Directoryのことです。それは実際にはかなり頻繁に使用されます。たとえば/proc/$$/cwd、コマンドを実行するディレクトリへのリンクを参照してください。

@slhckが指摘したように、それが良い選択ではないことを..別にすれば、標準的な名前は知りませんdot-dot


0

Posixは、親子ディレクトリ関係について話すのはかなりあいまいです。他の人が言ったように、./ ..は他の人間と話したりコミュニケーションをとったりするのに役に立たない。

ファイル構造は、ツリーデータ構造と考えることができます。ここでは、一般的に意味を伝えるには「親」と「子」または「娘」で十分です。データ構造の教科書にはこの規則が記載されています

代わりに、木は「上」と「下」にあると言えます。慣例により、「上」はルートディレクトリに近いことを意味し、「下」は子(ren)を指します。

私はどちらか、IsCurrentOrUp()またはIsCurrentOrParent()関数を命名するための良い習慣であると主張することができると思います。

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