LINE_MAX
を実行して取得できる値ですgetconf LINE_MAX
。 FreeBSD 12とUbuntu 18.04(そして他の多くのオペレーティングシステムも疑われます)では、値は2048バイトです。
POSIXの世界には、テキストファイルを扱うために特別に設計されたシェルユーティリティがたくさんあります。改行を含むバイトより長い行を持つファイルはLINE_MAX
テキストファイルではありません(とにかくPOSIXで定義されているように)。テキストファイルを入力として使用するように設計されたシェルユーティリティは、これらのファイルを正しく処理する必要はありません。
実際、非常に長い行を含むテキストファイルを処理できないユーティリティが見つからないようです。私が知る限り、GNUユーティリティにはテキストファイルの行長に実際の制限はありません(FreeBSDについてはわかりません)。
LINE_MAX
バイトより長い行をブロックする現代または準現代のオペレーティングシステムのシェルユーティリティを知っている人はいますか?しかし、PerlやPythonなどのプログラミング言語もその値の影響を受けますかLINE_MAX
?
答え1
LINE_MAX
このサイトには、少なくともいくつかの状況でそれに固執するシェルユーティリティの例があります。オープンBSDcut
;しかし実際にはそうではない。チョーク行はこれよりも長いですが、一部の機能は行LINE_MAX
の最初の文字に制限されています。
より長い行を使用するユーティリティを完全に拒否することに加えて、潜在的に望ましくない動作につながる共通のパターンがあります。
fgets(line, sizeof line, fp);
where line
is LINE_MAX
- サイズの文字配列(例を参照)pam_localuser
)。line
処理するたびにfgets
non-が返された場合、行が長すぎるとNULL
入力LINE_MAX
が分割されます。したがって、pam_localuser
長/etc/passwd
さが1より大きい行はLINE_MAX
2行として扱われます。
私が見たプログラミング言語とパーサジェネレータには参照がありませんLINE_MAX
(その言語で書かれたプログラムで値を使用できるように渡すことに加えて)。これには、GCC、Perl、Python、Luaが含まれます。