我已经编写了上面的代码来测试" readsome" 。当"读"使用代码工作,但需要等待输入0x10字符才能工作。 随着" readome"在我的系统上没有读取任何内容(ubuntu Linux 3.13.0-37)。 为什么?
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv)
{ std::setlocale(LC_CTYPE, "");std::locale::global(std::locale(""));
char s[0x11];int i=150;
do{
s[0]=0;
std::cin.readsome(s,0x1);
if(std::cin.gcount()>0)
s[std::cin.gcount()]=0;
if(std::cin.eof()) std::cout<<"EOF!"<<std::endl;
std::cout<<s;
usleep(100000);
}while(i--);
std::cin.read(s,0x10);
std::cout<<s<<std::endl;
return 0;
}
答案 0 :(得分:1)
根据http://en.cppreference.com/w/cpp/io/basic_istream/readsome &#34;此功能的行为高度针对特定于实现。例如,当与std :: ifstream一起使用时,一旦文件被打开,一些库实现就会用数据填充底层的filebuf(并且这些实现上的readsome()读取数据,可能但不一定是整个文件),而其他实现仅在请求实际输入操作时从文件读取(并且在文件打开后发出的readsome()从不提取任何字符)。同样,对std :: cin.readsome()的调用可能会返回所有未处理的未处理控制台输入,或者可能始终返回零并且不提取任何字符。&#34;
所以linux控制台案例中的readome似乎完全没用。 (如果某个团体知道不同的东西请告知)。
答案 1 :(得分:0)
readsome
仅提取缓冲区中的字符。它不会等待任何输入。
从标准([istream.unformatted] / 32):
如果
rdbuf()->in_avail() == -1
,请致电setstate(eofbit)
[...],和 不提取任何字符; - 如果rdbuf()->in_avail() == 0
,则不提取字符
- 如果rdbuf()->in_avail() > 0
,摘录min(rdbuf()->in_avail(),n))
。