Linux Mint 18.3 x64 без Wi-Fi после чистой установки

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

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

И когда программа использует библиотеку stdio , стандартный вывод на терминал (в документации это называется «интерактивное устройство») по умолчанию буферизируется по строке, но вывод в файл или конвейер полностью буферизован.

Программа, использующая библиотеку stdio, может выбрать полную буферизацию, буферизацию строки или ее отсутствие, вызвав setvbuf . Он также может вызвать fflush для принудительной записи в любое время.

GNU grep принимает параметр - строчная буферизация , который запускает следующий код в функции, выводящей соответствующую строку:

if (line_buffered)
  fflush (stdout);

Соединение всех частей вместе:

С помощью этой команды:

cat /dev/ttyACM0 | grep "something" > essai

cat будет читать строку за раз из / dev / ttyACM0 . После того, как он накопит несколько килобайт вывода, он выполнит запись в конвейер. Он будет повторять это до тех пор, пока чтение не вернет счетчик, равный нулю, или не завершится ошибкой (чего, вероятно, не произойдет, пока последовательный порт не отключится).

grep будет читать несколько килобайт за раз из конвейера, и после того, как он накопит несколько килобайт вывода, он запишет в файл essai fle. Он будет повторять это до тех пор, пока чтение не вернет счетчик, равный нулю, или не завершится ошибкой, что произойдет, если и когда процесс cat завершится.

Таким образом, вы не увидите ничего в файле essai , пока grep не найдет совпадающих строк на несколько килобайт.

Для более быстрой записи вывода в файл вы можете указать GNU grep эту опцию:

grep --line-buffered < /dev/ttyACM0 > essai

Поскольку он читает из последовательного порта, он будет буферизован по строке, а - с буферизацией по строке ] также буферизирует строку вывода.

2
24.06.2018, 16:01
1 ответ

Обновление ядра с 4.10 до 4.17 устранило проблему. Вероятно, соответствующий драйвер для wifi-адаптера, не входил в состав старого релиза ядра.

2
27.01.2020, 22:09

Теги

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