Standards / Extensions | C or C++ | Dependencies |
---|---|---|
Language Environment | both |
#include <stdio.h>
#include <stdio_ext.h>
int __fwriting(FILE *stream);
#define _OPEN_SYS_UNLOCKED 1
#include <stdio.h>
#include <stdio_ext.h>
int __fwriting_unlocked(FILE *stream);
The __fwriting() function determines if the last operation on the specified stream is a write operation or if the specified stream is open for write-only or append-only.
The __fwrite_unlocked() function is equivalent to the __fwriting() function with the exception that it is not thread-safe. This function can be safely used in a multithreaded application if it is called while the invoking thread owns the (FILE *) object, such as after a successful call to either the flockfile() or ftrylockfile() function.
The __fwriting() functions return nonzero when the last operation was a write operation or the stream is open for write-only or append-only. Otherwise, the __fwriting() function returns 0. If an error has occurred, the __fwriting() functions return 0 and set errno to nonzero.
An application wishing to check for error situations should set errno to 0, then call __fwriting(), and then check errno. If errno is nonzero, assume that an error has occurred.
/* 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;
}
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