NAME ios.intro - introduction to iostreams and the man pages SYNOPSIS #include <iostream.h> class stream_MT ; class streambuf : public stream_MT ; class unsafe_ios ; class ios : virtual public unsafe_ios, public stream_MT ; class unsafe_istream : virtual public unsafe_ios ; class istream : virtual public ios, public unsafe_istream ; class unsafe_ostream : virtual public unsafe_ios ; class ostream : virtual public ios, public unsafe_ostream ; class unsafe_iostream : public unsafe_istream, public unsafe_ostream ; class iostream : public istream, public ostream ; class istream_withassign : public istream ; class ostream_withassign : public ostream ; class iostream_withassign : public iostream ; class Iostream_init ; extern istream_withassign cin ; extern ostream_withassign cout ; extern ostream_withassign cerr ; extern ostream_withassign clog ; #include <fstream.h> class filebuf : public streambuf ; class unsafe_fstreambase : virtual public unsafe_ios ; class fstreambase : virtual public ios, public unsafe_fstreambase ; class fstream : public fstreambase, public iostream ; class ifstream : public fstreambase, public istream ; class ofstream : public fstreambase, public ostream ; #include <strstream.h> class strstreambuf : public streambuf ; class unsafe_strstreambase : public virtual unsafe_ios ; class strstreambase : public virtual ios, public unsafe_strstreambase ; class istrstream : public strstreambase, public istream ; class ostrstream : public strstreambase, public ostream ; class strstream : public strstreambase, public iostream ; #include <stdiostream.h> class stdiobuf : public streambuf ; class stdiostream : public ios ; DESCRIPTION These man pages provide the reference material needed to understand the details of the individual functions and classes which make up C++ stream I/O. The term ``stream'' as used here has nothing to do with stdio files in C (also called streams), or Unix System V streams. The iostream package has been extended to support the shar- ing of iostream objects among multiple cooperating threads under the libthread library. Most iostream classes are now defined in two forms, an ``unsafe'' version which does not protect against simultaneous access by multiple threads, and a ``safe'' version which uses mutex locks to protect objects from concurrent access. Two exceptions are the class streambuf and class filebuf; these objects support both locked and unlocked versions of all relevant member func- tions. The unlocked versions are distinguished by the suf- fix _unlocked, which is appended to the function names. Use of the ``safe'' versions does not guarantee that an application will behave properly in a multi-threaded environment; for more information on this subject see the C++ 4.1 Library Reference Manual, Chapter 5, "Using libC in a Multithreaded Environment." ENVIRONMENT The discussion about thread safety applies only to Solaris 2.x. On Solaris 1.x the ``safe'' and ``unsafe'' functions behave identically. History The original edition of The C++ Programming Language, by Bjarne Stroustrup, introduced C++ stream I/O which appeared in early releases of C++ compilers. A new version of stream I/O, usually called iostreams, appeared beginning with the ``2.0'' release of C++. Compared with original stream I/O, iostreams made more effective use of C++ language features, especially new language features not available in earlier versions of C++. Basic stream I/O still worked the same way in both versions of streams, and iostreams included some backward-compatibility features to further ease the transi- tion. This latest release of iostreams has further modifi- cations due to additional language changes. The changes fall into two categories: changes in the char types, and changes in the rules for nested types. Although earlier implementations of C++ had only two charac- ter types, C++ now has three distinct versions of the char type: ``plain'' char, signed char, and unsigned char. Ear- lier versions of iostreams had function versions taking ``plain'' char, which was signed, and other versions taking unsigned char. Because these functions (mostly) deal only with characters and arrays of characters, there is now (mostly) only one version of such functions, taking ``plain'' char. Earlier versions of C++ used the C rule that a type defined inside a class was treated as though it were defined outside the class. The C++ language rule is now that any type defined inside a class is local to that class, and may be referenced only with the outer class qualifier. This affects iostreams in only a few places. For example, the enumerated type names defined inside class ios must now be qualified. That is, instead of using io_state or seek_dir, you should now use ios::io_state or ios::seek_dir. In these man pages we describe the public and protected interfaces needed for writing portable programs using ios- treams. We do not discuss implementation details which are not exposed to public view, and which should not be relied on in portable programs. Fundamental Classes Iostreams are basically a collection of class hierarchies. The fundamental classes are as follows: unsafe_ios This class contains state variables that are common to the various stream classes, for example, error states and formatting states. This class is not protected against multi-threaded access. See ios(3C++). ios Class ios is a virtual base class of every stream. It maintains formatting and status information. This class is further described in ios(3C++). This class uses mutex locks to protect against multi-threaded access. See ios(3C++). streambuf Class streambuf is the virtual base class for all stream buffers. This class defines the basic func- tionality for buffering, supporting insertion (storing, also known as putting) and extraction (fetching, also known as getting). Each non-virtual member function is defined in two versions: an unlocked version (dis- tinguished by the suffix _unlocked appended to the function name) which does not protect against multi- threaded access; and a locked version (the default) which is mt-safe. The public interface for the class, used for programming I/O, is described in sbufpub(3C++). The protected interface for the class, used when deriving new buffer classes, is described in sbufprot(3C++). unsafe_istream This class supports formatted and unformatted conver- sion from sequences of characters fetched from stream- bufs. This class is not protected against multi- threaded access. See istream(3C++). istream Class istream provides formatted and unformatted input operations on an associated streambuf. On Solaris 2.x this class uses mutex locks to protect against multi- threaded access. This class is further described in istream(3C++). unsafe_ostream This class supports formatted and unformated conversion to sequences of characters stored into streambufs. This class is not protected against multi-threaded access. See ostream(3C++). ostream Class ostream provides formatted and unformatted output operations on an associated streambuf. On Solaris 2.x this class uses mutex locks to protect against multi- threaded access. This class is further described in ostream(3C++). iostream Class iostream combines the functionality of istream and ostream. iostream provides both input and output on a single bidirectional stream. On Solaris 2.x this class uses mutex locks to protect against multi- threaded access. istream_withassign ostream_withassign iostream_withassign Classes istream_withassign, ostream_withassign, and iostream_withassign add the assignment operator to their corresponding classes: istream, ostream, and iostream. The predefined streams cin, cout, cerr, and clog (described below) require the assignment operator for technical reasons, and are objects of these class types. Derived Buffer Classes The buffer class associated with a stream defines the way in which characters are fetched or stored. You may derive your own buffer class from streambuf, as explained in sbufprot(3C++). Three predefined buffer classes are pro- vided with iostreams: filebuf This buffer class provides I/O for files, through low- level file descriptors; C ``standard I/O'' (stdio) is not used by filebufs. Member functions support file open, close, and seek operations. When you get from or put to a filebuf, the buffer class reads or writes the associated file as required. Each non-virtual member function is defined in two versions: an unlocked version (distinguished by the suffix _unlocked appended to the function name) which does not protect against multi-threaded access; and a locked version (the default) which is mt-safe. This class is further described in filebuf(3C++). stdiobuf This buffer class provides I/O using C stdio FILE structures. This form of I/O is much less efficient than using filesbufs. If you must mix I/O to the same file using iostream and C stdio, use a stdiobuf as the stream buffer class. Otherwise, use a filebuf. On Solaris 2.x this class is protected against multi- threaded access with mutex locks. This class is further described in stdiobuf(3C++). strstreambuf This class provides formatted and unformatted memory transfer betweeen streams and character arrays. Each non-virtual member function is defined in two versions: an unlocked version (distinguished by the suffix _unlocked appended to the function name) which does not protect against multi-threaded access; and a locked version (the default) which is mt-safe. This class is further described in ssbuf(3C++). Derived Stream Classes You normally define a stream class by deriving from one of istream, ostream, or iostream, and using a specialized buffer class. There are several predefined stream classes for the most common needs: ifstream ofstream fstream These classes support file I/O by using a filebuf as the associated buffer class. They are, respectively, for input, output, and bidirectional use. These classes are protected against multi-threaded access with mutex locks. These classes are further described in fstream(3C++). istrstream ostrstream strstream These classes support ``I/O'' with in-memory character arrays by using a strstreambuf as the associated buffer class. They are, respectively, for input, output, and bidirectional use. These classes are protected against multi-threaded access with mutex locks. These classes are further described in strstream(3C++). stdiostream This class uses a stdiobuf as its associated buffer class. As noted above, this is much less efficient than using an fstream or other stream using a filebuf. The only reason to use a stdiostream is to be able to perform I/O to the same file from both iostreams code and C stdio code. This class is further described in stdiobuf(3C++). Predefined Streams C and C++ programs traditionally begin execution with three predefined files for I/O: the standard input, output and error files. When you include <iostream.h> in your program, four predefined iostreams become available for use: cin connected to standard input (file descriptor 0). cout connected to standard output (file descriptor 1). cerr connected to standard error (file descriptor 2). Data written to cerr is by default unit-buffered, meaning that characters are flushed after each complete inser- tion operation. clog connected to standard error (file descriptor 2). By default, this stream is fully buffered, which is the only difference from using cerr. The streams cin, cerr, and clog are tied to cout, meaning that cout is flushed before extracting from cin or inserting to cerr or clog. The pre-defined streams are, by default, protected against multi-threaded access by the use of mutex locks. This protection may be disabled by calling the member function set_safe_flag defined by class stream_MT. Header Files <iostream.h> This header provides the basic functionality of ios- treams, including the use of the predefined streams. <fstream.h> This header includes <iostream.h> and also defines the filebuf and fstream classes. <strstream.h> This header includes <iostream.h> and also defines the strstreambuf and strstream classes. <stdiostream.h> This header includes <iostream.h> and also defines the stdiobuf and stdiostream classes. <manip.h> This header defines some standard manipulators. Mani- pulators are described in the tutorial, as well as in manip(3C++). SEE ALSO filebuf(3C++), fstream(3C++), ios(3C++), istream(3C++), manip(3C++), ostream(3C++), sbufprot(3C++), sbufpub(3C++), ssbuf(3C++), stdiobuf(3C++), strstream(3C++), stream_locker(3C++), stream_MT(3C++), C++ 4.1 Library Reference Manual: Chapter 4, "The Iostream Library", Chapter 5, "Using libC in a Multithreaded Environment."
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |