Определение времени в dmesg

Канал и перенаправление - это разные животные, так сказать. Когда вы используете перенаправление here-doc ( ) или перенаправление stdin , текст появляется не из воздуха - он фактически попадает в дескриптор файла (или временный файл, если хотите), и именно на него будет указывать стандартный ввод двоичного файла.

В частности, вот отрывок из исходного кода bash , файл redir.c (версия 4.3):

/* Create a temporary file holding the text of the here document pointed to
   by REDIRECTEE, and return a file descriptor open for reading to the temp
   file.  Return -1 on any error, and make sure errno is set appropriately. */
static int
here_document_to_fd (redirectee, ri)

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

Каналы, поскольку они представляют собой буферы размером 64 КиБ (по крайней мере, в Linux) с записью 4096 байтов или менее, гарантированно являются атомарными, они не являются доступными для поиска, т.е. вы не можете свободно перемещаться по ним - только для последовательного чтения.Однажды я реализовал команду tail в Python. 29 миллионов строк текста могут быть найдены за микросекунды при перенаправлении, но если cat 'переадресован через конвейер, что ж, ничего нельзя сделать - так что все это нужно читать последовательно.

Другая возможность состоит в том, что двоичный файл может захотеть открыть файл специально и не хочет получать ввод из канала. Обычно это делается с помощью системного вызова fstat () и проверки, поступает ли ввод из файла типа S_ISFIFO (что означает канал / именованный канал).

Ваш конкретный двоичный файл, поскольку мы не знаем, что это, вероятно, пытается искать каналы, но не может искать. Рекомендуется ознакомиться с его документацией, чтобы узнать, что именно означает код ошибки 14.

ПРИМЕЧАНИЕ : Некоторые оболочки, такие как dash (Debian Almquist Shell, по умолчанию / bin / sh в Ubuntu), реализуют перенаправление here-doc с помощью каналов внутри. , поэтому поиск может быть недоступен. Суть остается прежней - каналы являются последовательными и по ним нелегко перемещаться, и попытки сделать это приведут к ошибкам.

1
23.03.2016, 20:16
0 ответов

Теги

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