LSB(Linux Standard Base)には行末にNEWLINE文字が必要ですか?

LSB(Linux Standard Base)には行末にNEWLINE文字が必要ですか?

POSIX と SUS (Single UNIX Spec) の両方の行を次のように定義します。

<newline>ゼロ個以上の非文字と終了文字のシーケンスです<newline>

多くのディストリビューションは、POSIXよりLSBを好む。 LSBには多くのPOSIX / SUS規格が含まれていますが、すべてではありません。

LSB v4.1では、まだNEWLINE文字で行を終了する必要がありますか?

答え1

~から「範囲」章:

LSB(Linux Standard Base)は、アプリケーションをコンパイルするためのシステムインターフェースとインストールスクリプトをサポートする最小環境を定義します。その目的は、LSB準拠の大容量アプリケーション用の統一された業界標準環境を提供することです。

[...]

LSBは主にバイナリインタフェース定義です。アプリケーションで使用可能なすべてのソースレベルAPIがこの仕様に含まれるわけではありません。

標準ユーティリティ(一部の拡張を除く)の動作に関するほとんどのこと、および基本用語の定義など、LSBで定義されていないものについては、POSIX標準(一部の拡張を除く)を参照してください。規範的なLSBへの参照(たとえば、LSBはPOSIXの上に構築されています)

POSIX規格私たちに教えてください一つワイヤーはい

<newline>ゼロ個以上の非文字と終了文字のシーケンスです<newline>

これは、LSB 4.1 に準拠するシステムでも、テキスト行が改行文字で終わらなければならないことを意味します。

答え2

POSIXあなたはこの要件の結果を誤解したようです。

改行で終わらないのは行ではありません。

たとえば、wcファイルに改行がまったく含まれていない場合、Linuxでもゼロ行が報告されます。

追加した新しい質問は、特定のユースケースとそれに関連する問題について尋ねるため、最初の質問とは少し異なって見えます。

まず、改行で終わる長いファイルはLinuxに関連しない他の問題を引き起こす可能性があります。 Cインクルードファイルが改行で終わらない場合、Cソースの次の行テキストが最初に期待どおりに機能すると、ファイルCソースの#includeが失敗する可能性があります。

また、一部のプログラムは、改行文字で終わらない場合、ファイルの最後の行を無視します。

nulSCCSv4 や SCCSv5 などのソフトウェアは、ファイルにバイトが含まれているか改行文字で終わらない場合、ファイルを「バイナリ」として分類します。これにより、最適ではない増分処理が発生します。

結局のところ、LSBLinuxにはバイナリ標準がありますが、異なるプラットフォーム間でファイルがコピーされますが、この点でLSB違いがあってもPOSIX変わりませんPOSIX

UNIXおそらく以前は、どのエディタも改行文字で終わらないファイルを作成できなかったことを知っておくと便利です。これらのファイルを生成できる最初のエディタは1979年にあり、その後に続いてGosling EMACS1980年にVEDリリースされましたUNOS(最初のUNIXレプリカ)。

したがって、ユーザーにそのようなファイルを避けるように指示するのは良い習慣のようです。

関連情報