2016-07-26 36 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字符。如果你正在處理圖像,你可能不想通過標準輸出來洗牌數據。 – Dale

+1

大約一年前,我在Imagemagick上嘗試了64位基準,結果因爲無法正常工作而放棄。我使用它可能是問題的PHP。無論如何,來自Imaagemagick論壇的引用「命令行只能接受如此多的數據,對於大文件,您需要將內聯數據放在文件中並引用它,如inline:@mydata。」 IM V7可能會更好「內聯數據限制爲4096個字符(IMv7中的8192個) - 除非從文件中讀取:」另外還有一個應該使用「內聯編碼器」修復的錯誤。 – Bonzo

回答

0

沒有。儘管終端在超長線路上表現不佳。

+0

這個問題與終端,afaics無關。 – rici

1

標準輸出沒有限制。

如果你想確保這一點,只是嘗試:

cat /dev/urandom > somerandomfile 

它會迅速填滿你的磁盤。

另請注意,默認情況下,在標準C程序中,標準輸出緩衝在換行符上,並且存在緩衝區限制大小。

+0

貓> cat>如何在幕後工作?這可能是緩衝,而不是發送最大的東西。 – Dale

+0

應該指出,base64不包含換行符。 – Dale

+0

這取決於'貓'。但OP的問題不是關於'cat',而是關於標準輸出。 – blue112

0

其實是有一定限度的,但你是不可能與圖像文件打:標準輸出(通常)不與「大文件」支持打開。這是重定向到文件或管道時的問題(您的輸出可能在4GB大小時失敗)。

@Dale暗指的管道限制指的是讀取器在看到數據之前可以在管道中的量。

在任何情況下,文件大小將受可用磁盤空間的限制。

base64中的編碼不會改變任何這一點,除了您將使用更多的空間,但是使用輸出。

+0

我認爲這隻適用於使用32位off_t編譯的32位系統,並且只有在您打開要讀取的文件時纔是如此。寫入標準輸出在任何Linux上都不會有任何限制。 – user894763

+0

它實際上取決於*應用程序*,而不是*系統*。 –

+0

我做了一些測試:在64位系統上,任何地方都是大文件,不需要任何編譯器標誌或將任何選項傳遞給open()。在32位linuxes上,你是對的,你需要傳遞'-D_FILE_OFFSET_BITS = 64'到編譯器才能打開和寫入一個大文件,或者寫一個巨大的文件到stdout。OP可能是64位的,所以可能沒有限制。 – user894763

相關問題