istream::readsome不从控制台读取?
istream::readsome doesn't read from console?
我已经编写了上面的代码来测试"readsome"。当使用"read"时,代码可以工作,但需要等待0x10字符的输入工作。使用"readsome",我的系统上什么都不会读取(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;
}
根据 http://en.cppreference.com/w/cpp/io/basic_istream/readsome"这个函数的行为是高度特定于实现的。例如,当与 std::ifstream 一起使用时,一些库实现会在打开文件后立即用数据填充底层 filebuf(并且此类实现上的 readsome(( 可能会(但不一定(读取整个文件的数据(,而其他实现仅在请求实际输入操作时才从文件中读取(并且文件打开后发出的 readsome(( 永远不会提取任何字符(。同样,对 std::cin.readsome(( 的调用可能会返回所有挂起的未处理的控制台输入,或者可能始终返回零并且不提取任何字符。
因此,在 linux 控制台案例中阅读似乎完全没用。(如果有人知道不同的事情,请告知(。
readsome
仅提取缓冲区中已有的字符。它不会等待任何输入。从标准([istream.unformatted]/32(:
如果
rdbuf()->in_avail() == -1
,则调用setstate(eofbit)
[...],并且 不提取任何字符; — 如果rdbuf()->in_avail() == 0
,则不提取任何字符
— 如果rdbuf()->in_avail() > 0
,摘录min(rdbuf()->in_avail(),n))
。
相关文章:
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 从文件读取并通过矢量输出到控制台
- 反转从控制台读取的文本
- 控制台未正确读取输入字符串
- 如何读取windows服务启动的控制台应用程序的输出
- 如何使用 cin 将整数从控制台读取到向量中
- 如何从 c++ 控制台读取未知行数(允许空行)上的输入
- 硬编码字符串与强制转换为 PUCHAR 并打印到控制台时从控制台读取的字符串的结果不同
- 如何从控制台启动可执行文件并使用Qt读取输出
- C++ 从控制台读取整数数组
- 从控制台输出读取 C++
- 指向C 中的结构 - 从控制台读取
- 控制台将继续关闭,而不是读取 if 语句中的字符串
- 如何读取控制台输入并将其存储到向量字符串中
- 在Qt控制台应用程序中读取和写入QProcess
- 如何从文件中一次读取一个输入,类似于在c++中使用cin/scanf从控制台读取输入
- 执行带有参数的 .bat 文件并以 C++ 格式读取控制台输出
- 从控制台读取字符
- 使用RInside读取R控制台
- 读取控制台调色板的 RGB 值