This section describes stdiobuf, which is a class which specializes a streambuf to dealwith the top level input/output structure FILE. stdiobuf is intended to be used when mixing C and C++ code in the same program. New C++ code should use filebuf. #include <iostream.h> class stdiobuf : public streambuf { public:
}; class stdiostream : public ios { public:
}; | |||||||||||||||||||
Operations on a stdiobuf are reflected on the associated FILE. A stdiobuf is constructed in unbuffered mode, which causes all operations to be reflected immediately in the FILE. seekg()s and seekp()s are translated into fseek()s. setbuf() has its usual meaning; if it supplies a reserve area, buffering is turned back on. In the following descriptions, assume that:
Constructorsstdiobuf(FILE * fp) Constructs a stdiobuf in unbuffered mode, and associates it with fp. stdiostream(FILE * fp) Constructs a stdiostream, and associates it with fp. stdiobuf membersFILE * fp = std.stdiofile() Returns the file pointer connected to stdiobuf. int l = std.overflow(int c) Returns EOF if the file connected to stdiobuf is closed or c=EOF. Calls putc() and returns its value otherwise. int l = std.pbackfail(int c) Returns the value of ungetc(). streampos sp = std.seekoff(streamoff p, ios::seek_dir d, int l) Parameter l is ignored. Returns the value returned by the associated fseek(). int l = std.sync() Calls fflush() if the last operation was a write access. Returns fseek()’s return value for the current position. int l = std.underflow() Returns EOF if the file connected to stdiobuf is closed or end-of-file has been encountered. Returns the next character otherwise. stdiostream memberstdiobuf * std = sts.rdbuf() Returns a pointer to the stdiobuf connected to sts. | |||||||||||||||||||
EXAMPLE | The following program opens the file #TEMP, attaches a variable of type stdiobuf to this file, and then prints a message to show if the stdiobuf is attached properly to the file. #include <stdiostream.h> #include <stdio.h> #include <iostream.h> #include <stdlib.h> int main() { FILE *qw; const char * const name = "#TEMP"; if (!(qw = fopen(name, "w"))) { cerr << "Can't open " << name << ".\n"; exit(1); } stdiobuf s(qw); FILE *rt = s.stdiofile(); if (rt != qw) { cerr << "Error in stdiofile().\n"; } else { cerr << "stdiofile() is working ok.\n"; } return 0; } The result of executing the program is: stdiofile() is working ok. % CCM0998 CPU time used: 0.0086 seconds This program shows that the stdiofile() member function of stdiobuf returns the correct result in this case. | ||||||||||||||||||
SEE ALSO | |||||||||||||||||||