Проблемы при проверке способности стандартного ввода искать

Если я правильно понял вашу проблему, это должно сработать:

sed '/-$/ {N;s/-\n  / /}' your_file.qdp
2
12.05.2019, 09:29
1 ответ

//1./a.out:

Если вы не выполняете перенаправление стандартного ввода (без канала и без <), стандартный ввод наследуется от родительского процесса. Когда вы запускаете a.outв интерактивном режиме в оболочке, он наследует терминальное устройство, которое получает ваш ввод с клавиатуры как стандартный ввод.

Терминальные устройства обычно недоступны для поиска, потому что они представляют взаимодействие с пользователем, но в соответствии со стандартом POSIX lseekмогут возвращать успех и просто ничего не делать. В Linux lseekзавершается с ошибкой ESPIPE.

//2./a.out < /etc/passwd:

Здесь стандартный ввод перенаправляется на открытый файл. Поскольку /etc/passwdдолжен быть обычным файлом, его можно найти.

//3 cat < /etc/passwd |./a.out:

Здесь вы запускаете два процесса(catи./a.out)и соединяете их каналом.

cat(без других аргументов )читает его на стандартный ввод(/etc/passwd)и копирует в свой стандартный вывод (канал, соединяющийся с./a.out). Это не то же самое, что //2. С точки зрения ./a.outstdin не может искать, потому что это всего лишь канал, соединяющий другой процесс.

//4./a.out < /var/spool/cron/FIFO:

Здесь у вас есть именованный канал или аналогичный специальный файл. Этот случай подобен //3. У вас есть однонаправленное соединение с другим процессом. И эти не доступны для поиска.

4
27.01.2020, 21:58

Теги

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