POSIXで定義したテキストファイルになるには、ファイルはどのような条件を満たす必要がありますか?

POSIXで定義したテキストファイルになるには、ファイルはどのような条件を満たす必要がありますか?

POSIX は、テキストファイルを次のように定義します。

ゼロ行以上の文字を含むファイル。この行には NUL 文字は含まれず、<newline> 文字を含めて {LINE_MAX} バイトより長くすることはできません。 POSIX.1-2017はテキストファイルとバイナリファイルを区別しませんが(ISO C標準を参照)、多くのユーティリティはテキストファイルで動作すると予測可能または意味のある出力のみを生成します。これらの制限を持つ標準ユーティリティは、常にSTDINまたはINPUT FILESセクションに「テキストファイル」を指定します。

源泉:http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_403

しかし、次のようないくつかの不明な点があると思います。

  1. テキストファイルは通常のファイルでなければなりませんか?上記の抜粋では、ファイルが通常のファイルであることを明示的に明示していません。

  2. ファイルに単一の文字(改行で終わらない単一文字)が含まれている場合は、テキストファイルと見なすことはできますか?この質問はトリッキーに聞こえるかもしれませんが、「1つ以上の文字」の代わりに「文字」という単語を使用します。他の人は同意しないかもしれませんが、「1つ以上の文字」を意味する場合は、明示的に話す必要があると思います。

  3. 上記の抜粋は「行」を表しています。名前に行がある4つの定義(「空行」、「表示行」、「不完全行」、および「行」)が見つかりました。 「empty」、「shown」、「incomplete」を省略したため、「line」を意味すると推論する必要がありますか?それとも、上記の抜粋では、4つの定義はすべて1行と見なされますか?

このテキストブロックの後に発生するすべての質問は、「文字」が「1つ以上の文字」を意味すると推論することに依存します。

  1. ファイルが空の場合、1つ以上の文字が含まれていないため、テキストファイルではないと安全に推論できますか?

このテキストブロックの後に発生するすべての質問は、推論に依存します。上記の抜粋では、行は「Line」と定義され、名前に「Line」を含む3つの異なる定義は除外する必要があります。

  1. 「0行以上」の「0」は、ファイルに改行文字で終わらない1つ以上の文字が含まれている場合、そのファイルはまだテキストファイルと見なされる可能性があることを意味しますか?

  2. 「0行以上」とは、単一の「行」(0個以上の文字と終了改行文字)が始まると、最後の行が「不完全な行」(1つ以上の不完全な行)になることを意味しますか?ファイルの末尾の改行文字)?

  3. 「なし[行なし]は、改行文字を含む{LINE_MAX}バイトより長くすることはできません」は、テキストファイル内の特定の「行」に許可される文字数に制限があることを意味します(btw、Ubuntu 18.04、およびFreeBSD 11.1 LINE_MAX )。は「2048」です)?

ベストアンサー1

  1. テキストファイルは通常のファイルでなければなりませんか?上記の抜粋では、ファイルが通常のファイルであることを明示的に明示していません。

    いいえ。抜粋には、標準入力がデフォルトのテキストファイルとして指定されています。その他の標準ユーティリティ make特定用途これキャラクター特殊ファイル /dev/null テキストファイルとして

  2. ファイルに単一の文字(改行で終わらない単一文字)が含まれている場合は、テキストファイルと見なすことはできますか?

    文字は<newline>でなければなりません。そうでなければそうではありません。一行したがって、そのファイルはテキストファイルではありません。正確に0Aバイトを含むファイルは、1行のテキストファイルです。空行は有効な行です。

  3. 上記の抜粋は「行」を表しています。名前に行がある4つの定義(「空行」、「表示行」、「不完全行」、および「行」)が見つかりました。 「empty」、「shown」、「incomplete」を省略したので、「line」を意味すると推論する必要がありますか?

    これは実際に推論ではなく、単に言うことです。この言葉「ライン」は、状況に合わせて適切に定義されています。それがまさにその内容です。

  4. ファイルが空の場合、1つ以上の文字が含まれていないため、テキストファイルではないと安全に推論できますか?

    空のファイルはゼロ(またはそれ以上)行で構成されるため、テキストファイルです。

  5. 「0行以上」の「0」は、ファイルに改行文字で終わらない1つ以上の文字が含まれている場合、そのファイルはまだテキストファイルと見なされる可能性があることを意味しますか?

    いいえ、文字は行で構成されていません。

  6. 「0行以上」とは、単一の「行」(0個以上の文字と終了改行文字)が始まると、最後の行が「不完全な行」(1つ以上の不完全な行)になることを意味しますか?ファイルの末尾の改行文字)?

    そうではない違法、それは単なるテキストファイルではありません。テキストファイルを提供するために必要なユーティリティ可能このファイルを提供すると、望ましくない動作が発生します。

  7. 「なし[行なし]は改行文字を含む{LINE_MAX}バイトより長くできません」とは、テキストファイル内の特定の「行」に許可される文字数に制限があることを意味します。

    はい。

この定義は、単にテキストベースのユーティリティのいくつかの境界を設定しようとします(例えば、grep)確かに受け入れます。それがすべてです。彼らはまた物事をより自由に受け入れることができ、実際にはそうすることが多いです。改行がいっぱいになる前に発生すると仮定すると、固定サイズのバッファを使用して行を処理できます。あなたは物事を読みすぎているかもしれません。

おすすめ記事