bash может справиться с этим. Однако это будет намного медленнее, чем Perl:
echo "1.1.1.1,Some Text Here" |
while IFS=., read -r a b c d text; do
printf "%d.%02d.%02d.%03d,%s\n" "$a" "$b" "$c" "$d" "$text"
done
1.01.01.001,Some Text Here
IXOFF
не реализован на псевдотерминале -tty, а установка IXOFF
на псевдотерминале -не имеет никакого эффекта.
IXOFF
должен заставить драйвер tty отправлять символ VSTOP
на другую сторону, когда его очередь ввода заполнена (, что должно предотвратить отправку дополнительных данных ), и символ VSTART
, когда он обработал его, и есть место для дополнительных данных.
Это отличается от IXON
, что заставит драйвер tty учитывать символы VSTART
/ VSTOP
, отправленные с другой стороны, и при получении символаVSTOP
(^S
)останавливать любую передачу до VSTART
(^Q
). ] получен символ.
В случае псевдо -tty "другая сторона" является основным терминалом, т.е. эмулятор вашего терминала; когда вы нажимаете ^S
, это IXON
, а не настройка IXOFF
, которая заставит подчиненный tty перестать возвращать введенные символы и отображать записанные в него данные (, которые будут поставлены в очередь до тех пор, пока очередь вывода не будет заполнен, когда любой write(2)
подчиненному tty либо заблокирует, либо вернетEAGAIN
).
Реализация управления потоком на псевдо -ttys не требуется, потому что ядро всегда знает (путем проверки поля структуры или аналогичного )того, заполнена ли входная очередь подчиненного устройства, и может просто заблокировать процесс записи на мастер pty.
Программное управление потоком полезно только при использовании реального последовательного соединения без исходящих -из -сигналов диапазона, таких как RTS/CTS :, в отличие от Unix, TCP или других «конвейеров». абстракция, провод не буферизируется и не будет заполняться и блокироваться, пока получатель не прочитает все изменения состояния с него.