__freadable() — Determine if a stream is open for reading
Standards
Standards / Extensions | C or C++ | Dependencies |
---|---|---|
Language Environment | both |
Format
#include <stdio.h>
#include <stdio_ext.h>
int __freadable(FILE *stream);
General description
The __freadable() function determines if the specified stream has been opened for reading.
Returned value
The __freadable() function returns nonzero if the stream is opened for reading. Otherwise, the __freadable() function returns 0. If an error has occurred, __freadable() function returns 0 and sets errno to nonzero.
An application wishing to check for error situations should set errno to 0, then call __freadable(), and then check errno. If errno is nonzero, assume that an error has occurred.
- Error Code
- Description
- EBADF
- The stream specified by stream is not valid.
Example
CELEBF89
/* CELEBF89
This example writes and reads data to a file while querying the
stream for information about data in the I/O buffer.
*/
#include <stdio.h>
#include <stdio_ext.h>
void main() {
FILE *f;
char filename[FILENAME_MAX] = "myfile.dat";
char data[128] = "There are 34 bytes in this buffer\n";
int datalen = strlen(data);
size_t n = 0;
f = fopen(filename,"wb+");
if (f == NULL) {
perror("fopen() failed\n");
return;
}
if (__fwritable(f)) printf("Writing is allowed on the open stream\n");
if (__freadable(f)) printf("Reading is allowed on the open stream\n");
n = fputs(data,f);
if (n == EOF) {
perror("fputs() failed\n");
return;
}
n = __fpending(f);
printf("There are %d bytes in the buffer pending to be written\n", n);
if (__fwriting(f)) printf("The last operation on the stream was a write\n");
rewind(f);
n = fgetc(f);
n = __freadahead(f);
printf("There are %d bytes remaining to be read from the buffer\n", n);
if (__freading(f)) printf("The last operation on the stream was a read\n");
return;
}
Output
Writing is allowed on the open stream
Reading is allowed on the open stream
There are 34 bytes in the buffer pending to be written
The last operation on the stream was a write
There are 33 bytes remaining to be read from the buffer
The last operation on the stream was a read