创建新的标准流需要更改哪些内容?

创建新的标准流需要更改哪些内容?

希望这个问题不是太抽象,它涉及整个堆栈中的一堆软件。

我们都知道 /dev/stdin、/dev/stdout 和 /dev/stderr。如果我想创建一个新的标准流 /dev/stdjson 怎么办?需要什么软件来支持?我假设我不需要将文件描述符传递给 /dev/stdjson 给每个程序,以便它们可以根据需要打开该流。那么你可以在哪里添加新的标准流呢?它需要是一个内核模块,是 shell 的一部分吗?

答案1

关于标准流的事情是,假定它们在进程启动时可用,这意味着它们的文件描述符传递到每个程序。 (甚至是允许的让系统在这些文件描述符上打开一些未指定的文件,否则它们在之后将保持关闭状态execve()。)使这些流成为标准的另一件事是,C 运行时库创建FILE与标准输入、输出和错误相对应的对象,以便用户程序可以立即使用egfprintf()和其他功能。stdio.h

“设备”/dev/stdin等与此无关,而是通过以下方式访问这些文件描述符(或底层文件)的系统特定方式名字。如果你在 Linux 上看一下/dev/stdin,它是一个指向 的符号链接/proc/self/fd/0,它本身就是当前进程的文件描述符 0 的一个神奇的内核接口。如果没有那个 fd open/dev/stdin本身就不会做任何事情。

因此,要添加新的“标准流”,您需要更改 C 库,并且可能需要更改一些在启动程序时专门处理 fds 0、1 和 2 的程序。


但是,如果您谈论的是根据需要打开文件的进程,这听起来与标准流有点不同。当然,您可以在允许您的程序假定存在的位置创建一个命名文件。但是该文件的用途,以及它是常规文件、管道还是套接字,都取决于您实际想要执行的操作。另外,如果它特定于某个程序或一组程序,那么它可能比放在 中/var/lib/mytool更好/dev/

相关内容