简而言之,当我管道数据少于它需要时,它不会等待。源代码:
#include <iostream>
using namespace std;
int main(){
char buf[1024];
cin.read(buf, 5);
buf[5]='\0';
cout<<buf<<endl;
}
g ++ foo.cpp
echo“123”| ./a.out
123
如果我直接运行./a.out
,程序将等到我输入5个字符。
答案 0 :(得分:3)
read
读取字符,直到它读取指定数量的字符或遇到流结束。
如果您可以使用stream.fail()
检查上次操作是否失败(没有读取所有请求的字符)和stream.gcount()
来检查实际读取的字符数。
答案 1 :(得分:2)
我已将您的代码更新为以下
#include <iostream>
using namespace std;
int main(){
char buf[1024];
do{
cin.read(buf, 5);
buf[5]='\0'; // can be moved out of loop (placed after while)
}while(cin.gcount() < 5);
cout<< "Result is >" << buf << "<" <<endl;
}
现在程序正在等待,直到至少有5个字符被读取到buf
,但您应该知道\n
也是cin
流中的字符,因为用户按了Enter键< / p>