Ruby 当输入来自管道时,STDIN.read是否运行直到达到EOF?

Ruby 当输入来自管道时,STDIN.read是否运行直到达到EOF?,ruby,unix,pipe,stdin,Ruby,Unix,Pipe,Stdin,如果这是一个幼稚的问题,很抱歉,但假设我有一个名为processor.rb的Ruby程序,它以data=STDIN.read开头。如果我像这样调用这个程序 cat textfile.txt | processor.rb STDIN.read是否等待cat将整个textfile.txt导入?或者它是否将textfile.txt的某些不确定部分分配给数据变量 我问这个问题是因为我最近在我的一个程序中看到了一个奇怪的错误,表明后者是这样的。可能是行缓冲并读取,直到遇到换行符或EOF。读取方法应该按原

如果这是一个幼稚的问题,很抱歉,但假设我有一个名为
processor.rb
的Ruby程序,它以
data=STDIN.read
开头。如果我像这样调用这个程序

cat textfile.txt | processor.rb
STDIN.read
是否等待
cat
将整个
textfile.txt
导入?或者它是否将
textfile.txt的某些不确定部分分配给
数据
变量


我问这个问题是因为我最近在我的一个程序中看到了一个奇怪的错误,表明后者是这样的。

可能是行缓冲并读取,直到遇到换行符或EOF。

读取方法应该按原样导入整个文件,并且仅在生成输出的过程完成时返回,如管道上的标志所示。这种情况应该是,在cat的输出上,如果在后续时间调用read,将返回0字节

简单地说,一个进程可以随时附加到它的输出中,这是“tail-f”之类的情况,因此您不能保证在没有实际检查的情况下已经从STDIN读取了所有数据

不过,您的操作系统实现cat或shell管道的方式可能略有不同。我不熟悉POSIX对这里行为的规定