Что нужно изменить, чтобы создать новый стандартный поток?

Ваша система renameвыглядит как вариант util -linux 1 -, и в этом случае вы можете просто запустить ту же команду во второй раз, чтобы удалить вторую новую строку, например.:

$ ls -Q
"\nfile name\n"
$ rename.ul $'\n' '' *
$ ls -Q
"file name\n"
$ rename.ul $'\n' '' *
$ ls -Q
"file name"

1 см. Что со всеми переименованиями :предименовать, переименовать, файл -переименовать?

1
22.08.2021, 19:51
1 ответ

Дело в том, что стандартные потоки предполагаются доступными при запуске процесса, а это означает, что файловые дескрипторы для них передаются каждой программе.(Системе даже разрешено открывать некоторый неуказанный файл в этих файловых дескрипторах, если в противном случае они оставались бы закрытыми после execve(). )Другая вещь, которая делает эти потоки стандартными, заключается в том, что библиотека времени выполнения C создает объекты FILE, соответствующие стандартному вводу, выводу и ошибкам, поэтому пользовательская программа может использовать, например. fprintf()и другие stdio.hфункции на них сразу.

«Устройства» /dev/stdinи т. д. не связаны с этим, но являются специфическими для системы -способами доступа к этим файловым дескрипторам (или базовым файлам )через имена . Если вы посмотрите, например. /dev/stdinв Linux это символическая ссылка, указывающая на /proc/self/fd/0, который сам по себе является волшебным интерфейсом ядра для файлового дескриптора 0 текущего процесса. Без этого сам fd open /dev/stdinничего не делает.

Таким образом, чтобы добавить новый «стандартный поток», вам потребуется изменить библиотеку C и, возможно, ряд программ, которые специально обрабатывают fds 0, 1 и 2 при запуске программ.


Но если вы говорите о процессах, открывающих файл по мере необходимости, это звучит немного иначе, чем стандартные потоки. Конечно, вы можете создать именованный файл где-нибудь, что ваши программы могут предполагать наличие. Но что будет делать этот файл, и будет ли он обычным файлом, каналом или сокетом, зависит от того, что вы на самом деле пытаетесь сделать. Кроме того, если он относится к какой-либо программе или набору программ, его лучше поместить в что-то вроде /var/lib/mytool, а не в /dev/.

2
22.08.2021, 20:16

Теги

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