2016-07-26 14 views
1

imagemagickでコマンドラインに大きなイメージファイルのbase64エンコードを出力しています。私は、Linuxのコマンドラインで標準出力(1)に文字制限があるかどうか不思議です。私はUbuntu 14.04を使用しています。出力の文字制限があります

+0

確かに、スタウトの最大バッファサイズがあります。 http://linux.die.net/man/7/pipe。特に、「2.6.11より前のLinuxでは、パイプの容量がシステムページのサイズ(i386では4096バイト)と同じでした。Linux 2.6.11以降、パイプ容量は65536バイトです。」 base64は7 + 1ビットのASCII文字のみを生成します。イメージを処理している場合、stdoutを介してデータをシャッフルしたくないかもしれません。 – Dale

+1

私はImagemagickのベース64を1年前に試していましたが、それを動作させることができなかったので、あきらめました。私は問題であったかもしれないPHPでそれを使用していました。とにかくImaagemagickフォーラムの引用文「コマンドラインは大量のデータしか受け付けられませんが、大きなファイルの場合は、インラインデータをファイルに入れて、インラインのようなものを参照する必要があります:@mydata」 IM V7はもっと良いかもしれません "ファイルから読み込まない限り、インラインデータには4096文字制限(IMv7では8192)があります。"また、 "インラインコーダー"で修正されたバグがありました。 – Bonzo

答えて

0

いいえ。極端に長い行では端末がうまく動作しません。

+0

質問は、端末、afaicsとは関係ありません。 – rici

1

標準出力の上限はありません。あなたはそれを確認するには

、ちょうど試してみてください。それが急速にディスクがいっぱいになります

cat /dev/urandom > somerandomfile 

標準のCプログラムでは、stdoutは改行時にバッファリングされ、バッファ制限サイズがあることにも注意してください。

+0

猫はどのように舞台裏で働くのですか?これはおそらくバッファリングして、できるだけ大きなものを送信していないでしょう。 – Dale

+0

base64には改行文字は含まれていないことに注意してください。 – Dale

+0

これは 'cat'までです。しかし、OPの質問は 'cat'に関するものではなく、それはstdoutに関するものです。 – blue112

0

は、実際には限度があるが、あなたは、イメージファイルとそれをヒットするそうです:標準出力(通常は)「大規模ファイル」のサポートで開かれていません。これは、ファイルまたはパイプにリダイレクトするときの問題です(出力が4GBのサイズで失敗する可能性があります)。

@Daleによって暗示されたパイプの制限値は、読み取り装置がデータを見る前にパイプに入る可能性のある量を示します。

いずれの場合でも、ファイルサイズは使用可能なディスク容量によって制限されます。

Base64でのエンコーディングは、それ以上のスペースを使用することを除いて、それを変更しませんが、出力は使用されます。

+0

私はそれが32ビットシステムでのみ、32ビットのoff_tでコンパイルされていると思います。読み込み用にファイルを開いている場合に限ります。 stdoutへの書き込みには、どのLinuxでも制限はありません。 – user894763

+0

実際には*システム*ではなく*アプリケーション*に依存します。 –

+0

私はいくつかのテストを行いました.64ビットシステムでは、すべてが大容量のファイルであり、コンパイラフラグやopen()オプションを渡す必要はありません。 32ビットLinuxでは、巨大なファイルを開いたり書きたり、巨大なファイルをstdoutに書き込めるようにするには、コンパイラに '-D_FILE_OFFSET_BITS = 64'を渡す必要があります。OPはおそらく64ビットなので、おそらく制限はありません。 – user894763

関連する問題