2016-07-26 5 views
1

Я выводил кодировку base64 больших файлов изображений в командной строке с помощью imagemagick. Мне любопытно, есть ли ограничение символов на стандартном выходе (1) в командной строке в Linux. Я использую Ubuntu 14.04.Есть ли предел символов для вывода

+0

Определенно максимальный размер буфера для толстого. http://linux.die.net/man/7/pipe. В частности, «В версиях Linux до версии 2.6.11 емкость канала была такой же, как размер системной страницы (например, 4096 байт на i386). Поскольку Linux 2.6.11, емкость канала составляет 65536 байт». base64 создает только символы ASCII, которые имеют 7 + 1 бит. Вероятно, вы не хотите перетасовывать данные через stdout, если вы обрабатываете изображения. – Dale

+1

Я пробовал базу 64 на Imagemagick год назад назад и сдался, поскольку я не мог заставить его работать. Я использовал его с php, который, возможно, был проблемой. Во всяком случае, цитата из форума Imaagemagick «Командные строки могут принимать только столько данных. Для большого файла вам нужно поместить свои встроенные данные в файл и ссылаться на него, что-то вроде inline: @mydata». IM V7 может быть лучше »Есть ли ограничение на 4096 символов для встроенных данных (8192 в IMv7) - если только его не прочитано из файла:« Также была ошибка, которая должна была быть исправлена ​​с помощью встроенного кодера ». – Bonzo

ответ

0

№. Хотя терминалы не работают так хорошо с чрезвычайно длинными линиями.

+0

Вопрос не имеет ничего общего с терминалами, afaics. – rici

1

Нет ограничений на стандартный вывод.

Если вы хотите, чтобы убедиться в том, что, просто попробуйте:

cat /dev/urandom > somerandomfile 

Он будет быстро заполнить ваш диск.

Также обратите внимание, что по умолчанию в стандартной программе C stdout буферизируется в новой строке и существует размер ограничения буфера.

+0

Как кошка работает за кулисами? Это, вероятно, буферизация, а не отправка БОЛЬШОЙ ВЕЩИ. – Dale

+0

Следует отметить, что base64 не включает символ новой строки. – Dale

+0

Это до "кошки". Но вопрос OP не о 'cat', а о stdout. – blue112

0

На самом деле есть предел, но вы вряд ли ударить его с файлом изображения: стандартный вывод (обычно) не открывается с «большим файлом» поддержкой. Это проблема при перенаправлении на файл или канал (ваш выход может завершиться неудачей при размере 4 ГБ).

Пределы для труб, на которые ссылается @Dale, ссылаться на количество, которое может быть в трубе, прежде чем считыватель увидит данные.

В любом случае размер файла будет ограничен доступным дисковым пространством.

Кодировка в base64 не изменяет ничего, кроме того, что вы будете использовать больше места, однако используется выход.

+0

Я думаю, что это только на 32-битных системах, скомпилированных с 32-битным off_t, и только если вы открываете файл для чтения. Запись на stdout не будет иметь ограничений для любого Linux. – user894763

+0

Фактически это зависит от * приложения *, а не от * системы *. –

+0

Я проверил несколько тестов: в 64-битных системах везде есть большие файлы, вам не нужны какие-либо флагов компилятора или какие-либо опции для открытия(). В 32-битных Linux вы правы, вам нужно передать '-D_FILE_OFFSET_BITS = 64' компилятору, чтобы иметь возможность открывать и писать огромный файл или писать огромный файл в стандартный вывод.OP, вероятно, 64-битный, поэтому, вероятно, не имеет ограничений. – user894763

Смежные вопросы