It's like readsome isn't even reading. Returns 0 and doesn't read any chars. What is wrong here?
#include <fstream>
#include <iostream>
int main ()
{
std::fstream stream("list.cpp", std::ios::in);
if (stream.good() || !stream.bad() || stream.is_open()) {
std::cout << "Well, stream looks good." << std::endl;
char justOneChar = 'L';
auto ssize = stream.readsome(&justOneChar, 1);
std::cout << ssize << " : " << justOneChar << std::endl;
}
return -1;
}
Output:
Well, stream looks good. 0 : L
It doesn't work because there might not be any characters available for reading at that instant. It works as a non-blocking read function as someone mentioned, therefore this means that it doesn't wait for input, which is why it wasn't asking you for input. So for you to use it to successfully read anything, there must be something available in the underlying buffer.
To see the number of characters that can be extracted in the next call to readsome, use the in_avail function.
Consulting a reference,
In short,
readsome
is fairly useless, at least for standard streams. It's a super-nonblocking read: it will only load data that has been buffered in the user-level process, and it will not ever make a kernel call.1
is the maximum number of characters to read. If the streams internal buffers are empty when you call it, you'll get back zero as a return value.The following quote (with my bold) shows this aspect:
It's basically a way to get as many characters as are available (subject to your specified limit) without having to wait for the stream to provide more.