Unix 在一个过程中是否有定义良好的管道,如stdin、stdout和stderr?

Unix 在一个过程中是否有定义良好的管道,如stdin、stdout和stderr?,unix,operating-system,pipe,zos,Unix,Operating System,Pipe,Zos,系统中可以同时打开的z/OS UNIX管道的数量限制为8730。我写了一个程序来测试是否可以达到这个极限。我多次执行这个程序,结果显示创建第8727个管道将失败 我猜在UNIX程序开始执行时,有3个定义良好的管道用于STDIN、STDOUT和STDERR。但是我找不到任何提到“默认管道”的文档,所以我想知道我的猜测是否正确?您的猜测是正确的。他们被称为 在Unix和类Unix操作系统(在某种程度上,还有Windows)以及某些编程语言接口中,标准流是在计算机程序开始执行时在计算机程序及其环境(通

系统中可以同时打开的z/OS UNIX管道的数量限制为8730。我写了一个程序来测试是否可以达到这个极限。我多次执行这个程序,结果显示创建第8727个管道将失败


我猜在UNIX程序开始执行时,有3个定义良好的管道用于STDIN、STDOUT和STDERR。但是我找不到任何提到“默认管道”的文档,所以我想知道我的猜测是否正确?

您的猜测是正确的。他们被称为

在Unix和类Unix操作系统(在某种程度上,还有Windows)以及某些编程语言接口中,标准流是在计算机程序开始执行时在计算机程序及其环境(通常是文本终端)之间预先连接的输入和输出通道。这三个I/O连接称为标准输入(stdin)、标准输出(stdout)和标准错误(stderr)


如果这是一个系统范围的限制,那么其他一些,其他一些进程,有开放的管道


管道指的是FIFO,这是一种特殊类型的文件,流(stdin、stdout、stderr)不是作为管道开始生命的,但它们可以重定向到管道。请参见您的man dup()页面和mkfifo()。

谢谢您的回复。我知道在程序开始执行时有默认的文件描述符:stdin、stdout、stderr。但我不确定这三个I/O连接是管道。它们一开始不是管道,但可能会被切换。@zarchasmpgmr:是的。标准流不是从管道开始的。目前,这个问题与内存有关。zOS上的BUF_大小为256(x512字节)。因此,测试程序可能会消耗超过1G的内存(8730x256x512/1024/1024=1092.25MB)。zOS UNIX上的BUF_大小似乎太大了,相比之下,Linux上的BUF_大小是8,比zOS UNIX上的256小得多。谢谢。你的答案很清楚。但现在我遇到了内存问题,错误信息如下:
pipe:EDC5132I内存不足。(errno2=0x05970131)在创建8726管道时失败。错误号:132
正如Jim所说,UNIX进程正在运行的某个地方消耗了三个管道。我打赌这里的罪魁祸首是系统进程。我想澄清一下,你是在说流还是管道?stdin/out/err是文件I/O流;在UNIX中,管道是一种特殊类型的文件(如Jim McNamara在下面所述)。@zarchasmpgmr:我只是谈论管道。再次澄清:您是在谈论管道还是文件描述符?每个管道使用两个文件描述符,通常对文件描述符有每个进程的限制。鉴于stdin、stdout和stderr将消耗3个可用的fd,也许这就是您所说的。