|
|
1.1 ! root 1: . \"ident "%W%" ! 2: . \"Copyright (c) 1984 AT&T ! 3: . \"All Rights Reserved ! 4: . \"THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T ! 5: . \"The copyright notice above does not evidence any ! 6: . \"actual or intended publication of such source code. ! 7: .TH FILEBUF 3I+ "C++ Stream Library" " " ! 8: .SH NAME ! 9: filebuf \- buffer for file input/output ! 10: .SH SYNOPSIS ! 11: .ft B ! 12: .nf ! 13: .ta1i 2i ! 14: #include <iostream.h> ! 15: ! 16: typedef long streamoff, streampos; ! 17: class ios { ! 18: public: ! 19: enum seek_dir { beg, cur, end }; ! 20: enum open_mode { in, out, ate, app } ; ! 21: // \fIand lots of other stuff ... \fP ! 22: } ; ! 23: ! 24: #include <fstream.h> ! 25: ! 26: class filebuf : streambuf { ! 27: public: ! 28: filebuf() ; ! 29: filebuf(int d); ! 30: filebuf(int d, char* p, int len) ; ! 31: ! 32: filebuf* attach(int d) ; ! 33: int close(); ! 34: int fd(); ! 35: int is_open(); ! 36: filebuf* open(char *name, open_mode om, int prot=0664) ; ! 37: streampos seekoff(streamoff o, seek_dir d, open_mode m) ; ! 38: streampos seekpos(strempos p, open_mode m ) ; ! 39: streambuf* setbuf(char* p, int len) ; ! 40: int sync() ; ! 41: }; ! 42: .fi ! 43: .ft R ! 44: .SH DESCRIPTION ! 45: \f(CWfilebuf\fRs ! 46: specialize ! 47: \f(CWstreambuf\fRs ! 48: to use a file as source or sink of characters. ! 49: Characters are consumed by doing ! 50: writes to the ! 51: file, and are produced by doing ! 52: reads. ! 53: When the file is seekable, ! 54: a \f(CWfilebuf\fR allows seeks. ! 55: At least 4 characters of putback are guaranteed. ! 56: When the file permits reading and writing the buffer permits ! 57: both storing and fetching. No special action is required between ! 58: gets and puts. ! 59: A ! 60: \f(CWfilebuf\fRs that is connected to a file descriptor is said ! 61: to be \fIopen\fR. ! 62: .PP ! 63: Assume: ! 64: .br ! 65: \(em \fBf\fR is a \f(CWfilebuf\fR. ! 66: .br ! 67: \(em \fBpfb\fR is a \f(CWfilebuf*\fR. ! 68: .br ! 69: \(em \fBpsb\fR is a \f(CWstreambuf*\fR. ! 70: .br ! 71: \(em \fBi\fR, \fBd\fR, \fBlen\fR, and \fBprot\fR are \f(CWint\fR ! 72: .br ! 73: \(em \fBname\fR and \fBptr\fR are \f(CWchar*\fR. ! 74: .br ! 75: \(em \fBm\fR is \f(CWopen_mode\fR. ! 76: .br ! 77: \(em \fBoff\fR is \f(CWstreamoff\fR. ! 78: .br ! 79: \(em \fBp\fR and \fBpos\fR are \f(CWstreampos\fR. ! 80: .br ! 81: \(em \fBdir\fR is \f(CWseek_dir\fR. ! 82: .PP ! 83: Constructors: ! 84: .TP ! 85: \fBfilebuf()\fR ! 86: Constructs an initially closed \f(CWfilebuf\fR. ! 87: .TP ! 88: \fBfilebuf(d)\fR ! 89: Constructs a \f(CWfilebuf\fR connected to \fBd\fR. ! 90: .TP ! 91: \fBfilebuf(d,p,len)\fR ! 92: Constructs a \f(CWfilebuf\fR connected to \fBd\fR ! 93: and initialized to use the reserve area starting at \fBp\fR and containing ! 94: \fBlen\fR bytes. ! 95: If \fBp\fR is null or \fBlen\fR is zero or less, ! 96: the \f(CWfilebuf\fR will be unbuffered. ! 97: .PP ! 98: Members: ! 99: .TP ! 100: \fBpfb=f.attach(d) ! 101: Connects \fBf\fR ! 102: to an open file descriptor, \fBd\fR. ! 103: \fBpfb\fR is normally \fB&f\fR ! 104: but is 0 if \fBf\fR is already open. ! 105: .TP ! 106: \fBi=f.close() ! 107: Flushes any waiting output, closes the file descriptor, and disconnects ! 108: \fBf\fR. Unless an error occurs, \fBf\fR's error state will be cleared. ! 109: \fBi\fR is 0 unless errors occur in which case it is \f(CWEOF\fR . ! 110: Even if errors occur ! 111: \fBattach\fR leaves the file descriptor and \fBf\fR ! 112: closed. ! 113: .TP ! 114: \fBi=f.fd()\fR ! 115: Returns \fBi\fR, the file descriptor \fBf\fR is connected to. ! 116: If \fBf\fR is closed \fBi\fR is \f(CWEOF\fR. ! 117: .TP ! 118: \fBi=f.is_open()\fR ! 119: Returns non-zero when \fBf\fR is connected to a file descriptor, ! 120: and zero otherwise. ! 121: .TP ! 122: \fBpfb=f.open(name,m,prot)\fR ! 123: Opens a file with the specified pathname, mode, and protection, ! 124: and connects \fBf\fR to it. ! 125: \f(CWopen_mode\fRs may be or'ed together to form \fBm\fR. ! 126: \f(CWin\fR and \f(CWout\fR translate to corresponding UNIX modes. ! 127: \f(CWate\fR and ! 128: \f(CWapp\fR ! 129: both cause the file to be positioned ! 130: at its end during the open. \f(CWapp\fR implies \f(CWoutput\fR. ! 131: In addition, ! 132: \f(CWapp\fR causes all subsequent ! 133: writes to occur at the end of a file. ! 134: (In some systems this is supported directly by the kernel, in other ! 135: instances the desired effect is approximated by seeking to the ! 136: end of the file before each write.) ! 137: \f(CWout\fR may be specified even if \fBprot\fR does not permit ! 138: output. ! 139: Normally \fBpfb\fR is \fB&f\fR ! 140: but if an error occurs it is 0. ! 141: .TP ! 142: \fBp=f.seekoff(off,dir,m)\fR ! 143: Moves the get/put pointer as designated by \fBoff\fR and \fBdir\fR. ! 144: It fails if the file that \fBf\fR is attached to ! 145: does not support seeking, or if the attempted motion ! 146: is otherwise invalid (such as attempting to seek to a position ! 147: before the beginning of file). ! 148: \fBoff\fR is interpreted as a count ! 149: relative to the place in the file specified by \fBdir\fR ! 150: as described in \fIsbuf.pub\fR(3C++). ! 151: \f(CWm\fR is ignored. ! 152: \fBp\fR is the position after movement, or \f(CWEOF\fR if ! 153: a failure occurs. ! 154: The position of the file after a failure is undefined. ! 155: .TP ! 156: \fBp=f.seekpos(pos,m)\fR ! 157: Moves the file to a position \fBpos\fR ! 158: as described in \fIsbuf.pub\fR(3C++). ! 159: \f(CWm\fR is ignored. ! 160: Normally \fBp\fR is \fBpos\fR, but on failure it is \f(CWEOF\fR. ! 161: .TP ! 162: \fBpsb=f.setbuf(ptr,len)\fR ! 163: Sets up the reserve area as \fBlen\fR bytes beginning at \fBp\fR. ! 164: If \fBptr\fR is null or \fBlen\fR is less than or equal to 0, the ! 165: \fBf\fR will be unbuffered. ! 166: Normally \fBpsb\fR is \fB&f\fR, but ! 167: it is 0 if \fBf\fR is open, and in the latter case no changes ! 168: are made to the reserve area or buffering status. ! 169: .TP ! 170: \fBi=f.sync()\fR ! 171: Attempts to force the state of get/put pointers of \fBf\fR to agree ! 172: (be synchronized) with ! 173: the state of the file \fBf.fd()\fR. This means it ! 174: may write characters to the file if some have been buffered for ! 175: output or attempt to reposition (seek) the file if characters have ! 176: been read and buffered for input. Normally \fBi\fR is 0, but it ! 177: is \f(CWEOF\fR if synchronization is not possible. ! 178: Sometimes it is neccessary to guarantee that certain ! 179: characters are written together. ! 180: To do this, the program should use ! 181: \fBsetbuf\fR ! 182: (or a constructor) ! 183: to guarantee that the reserve area is at least as large as ! 184: the number of characters that must be written together. ! 185: It can then do a \fBsync\fR, ! 186: followed by storing the characters, ! 187: followed by another \fBsync\fR. ! 188: .SH CAVEATS ! 189: \fBattach\fR ! 190: and the constructors should test if the file descriptor they ! 191: are given is open, but I can't figure out a portable way to do that. ! 192: .PP ! 193: There is no way to force atomic reads. ! 194: .PP ! 195: Unix does usually report failures of seek (e.g. on a tty) and ! 196: so a filebuf does not either. ! 197: .SH SEE ALSO ! 198: sbuf.pub(3C++) ! 199: sbuf.prot(3C++) ! 200: fstream(3C++)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.