dd bs=X count=1 считывает менее X байтов

Не зная внутреннего устройства различных приложений, вы не можете сказать, какие символы были отображены драйвером терминала (от имени приложения )и какие были выведены данным приложением.

Я используюscriptдля захвата вывода для команды -строки приложений, подобных вашему примеру, а затем использую сценарий для фильтрации escape-последовательностей (см., например,Can Я программно «записываю» управляющие коды ANSI в файл с помощью утилит unix?).

Это не будет работать для полноэкранных -приложений, таких как редактор (, потому что не может четко показать, что происходит, когда курсор перемещается по экрану, обновляя текст ). Для этого (обычно )достаточно хорошо воспроизвести сеанс в замедленном режиме (, например,slowcat).

0
15.03.2021, 18:14
1 ответ

Это вызвано не поведением dd, а поведением операционной системы. Тем не менее, это поведение , указанное posix .

The value returned may be less than nbyte if the number of bytes left in the file is less than nbyte, if the read() request was interrupted by a signal, or if the file is a pipe or FIFO or special file and has fewer than nbyte bytes immediately available for reading. For example, a read() from a file associated with a terminal may return one typed line of data.

Когда вы устанавливаете bs=4, вы указываете ddчитать 4 байта за раз, но это означает, что он запрашивает только 4 байта на read(). Из ОС возвращает меньше, ddне вернется и read()второй раз, если только...

Существует iflag=fullblock, который предписывает ddвыполнить несколько read()операций для чтения всего блока.

2
18.03.2021, 22:24

Теги

Похожие вопросы