Annotation of 3BSD/libc/stdio/ios.r, revision 1.1.1.1

1.1       root        1: .de s
                      2: .sp .5v
                      3: ..
                      4: .de sr
                      5: .ft I
                      6: .ne 2
                      7: \\$1
                      8: .if t .sp .2
                      9: .br
                     10: .ft R
                     11: ..
                     12: .de it
                     13: \fI\\$1\fR
                     14: ..
                     15: .TL
                     16: A New Input-Output Package
                     17: .AU
                     18: D. M. Ritchie
                     19: .AI
                     20: .MH
                     21: .PP
                     22: A new package of IO routines is available.
                     23: It was designed with the following goals in mind.
                     24: .IP 1.
                     25: It should be similar in spirit to the earlier Portable
                     26: Library, and, to the extent possible, be compatible with it.
                     27: At the same time a few dubious design choices
                     28: in the Portable Library will be corrected.
                     29: .IP 2.
                     30: It must be as efficient as possible, both in time and in space,
                     31: so that there will be no hesitation in using it
                     32: no matter how critical the application.
                     33: .IP 3.
                     34: It must be simple to use, and also free of the magic
                     35: numbers and mysterious calls the use
                     36: of which mars the understandability and portability
                     37: of many programs using older packages.
                     38: .IP 4.
                     39: The interface provided should be applicable on all machines,
                     40: whether or not the programs which implement it are directly portable
                     41: to other systems,
                     42: or to machines other than the PDP11 running a version of Unix.
                     43: .PP
                     44: It is intended that this package replace the Portable Library.
                     45: Although it is not directly compatible, as discussed below,
                     46: it is sufficiently similar that
                     47: modifying programs to use it should be a simple exercise.
                     48: .PP
                     49: The most crucial difference between this package and the Portable
                     50: Library is that the current offering names streams in terms
                     51: of pointers rather than by
                     52: the integers known as `file descriptors.'
                     53: Thus, for example, the routine which opens a named file
                     54: returns a pointer to a certain structure rather than a number;
                     55: the routine which reads an open file
                     56: takes as an argument the pointer returned from the open call.
                     57: .SH
                     58: General Usage
                     59: .PP
                     60: Each program using the library must have the line
                     61: .DS
                     62:                #include <stdio.h>
                     63: .DE
                     64: which defines certain macros and variables.
                     65: The library containing the routines is `/usr/lib/libS.a,'
                     66: so the command to compile is
                     67: .DS
                     68:                cc  . . .  \-lS
                     69: .DE
                     70: All names in the include file intended only for internal use begin
                     71: with an underscore `\_' to reduce the possibility
                     72: of collision with a user name.
                     73: The names intended to be visible outside the package are
                     74: .IP stdin 10
                     75: The name of the standard input file
                     76: .IP stdout 10
                     77: The name of the standard output file
                     78: .IP stderr 10
                     79: The name of the standard error file
                     80: .IP EOF 10
                     81: is actually \-1, and is the value returned by
                     82: the read routines on end-of-file or error.
                     83: .IP NULL 10
                     84: is a notation for the null pointer, returned by
                     85: pointer-valued functions
                     86: to indicate an error
                     87: .IP FILE 10
                     88: expands to `struct \_iob' and is a useful
                     89: shorthand when declaring pointers
                     90: to streams.
                     91: .IP BUFSIZ
                     92: is a number (viz. 512)
                     93: of the size suitable for an IO buffer supplied by the user.
                     94: See
                     95: .it setbuf,
                     96: below.
                     97: .IP "getc, getchar, putc, putchar, feof, ferror, fileno" 10
                     98: 
                     99: .br
                    100: are defined as macros.
                    101: Their actions are described below;
                    102: they are mentioned here
                    103: to point out that it is not possible to
                    104: redeclare them
                    105: and that they are not actually functions;
                    106: thus, for example, they may not have breakpoints set on them.
                    107: .PP
                    108: The routines in this package, like the Portable
                    109: Library,
                    110: offer the convenience of automatic buffer allocation
                    111: and output flushing where appropriate.
                    112: Absent, however, is the facility
                    113: of changing the default input and output streams
                    114: by assigning to `cin' and `cout.'
                    115: The names `stdin,' stdout,' and `stderr'
                    116: are in effect constants and may not be assigned to.
                    117: .SH
                    118: Calls
                    119: .PP
                    120: The routines in the library are in nearly one-to-one
                    121: correspondence with those in the Portable Library.
                    122: In several cases the name has been changed.
                    123: This is an attempt to reduce confusion.
                    124: .s
                    125: .sr "FILE *fopen(filename, type) char *filename, *type"
                    126: .it Fopen
                    127: opens the file and, if needed, allocates a buffer for it.
                    128: .it Filename
                    129: is a character string specifying the name.
                    130: .it Type
                    131: is a character string (not a single character).
                    132: It may be `"r",' `"w",' or `"a"' to indicate
                    133: intent to read, write, or append.
                    134: The value returned is a file pointer.
                    135: If it is NULL the attempt to open failed.
                    136: .s
                    137: .sr "FILE *freopen(filename, type, ioptr) char *filename, *type; FILE *ioptr
                    138: The stream named by
                    139: .it ioptr
                    140: is closed, if necessary, and then reopened
                    141: as if by
                    142: .it fopen.
                    143: If the attempt to open fails, NULL is returned,
                    144: otherwise
                    145: .it ioptr,
                    146: which will now refer to the new file.
                    147: Often the reopened stream is
                    148: .it stdin
                    149: or
                    150: .it stdout.
                    151: .s
                    152: .sr "int getc(ioptr) FILE *ioptr
                    153: returns the next character from the stream named by
                    154: .it ioptr,
                    155: which is a pointer to a file such as returned by
                    156: .it fopen,
                    157: or the name
                    158: .it stdin.
                    159: The integer EOF is returned on end-of-file or when
                    160: an error occurs.
                    161: The null character \(aa\e0\(aa is a legal character.
                    162: .s
                    163: .sr "int fgetc(ioptr) FILE *ioptr
                    164: acts like
                    165: .it getc
                    166: but is a genuine function,
                    167: not a macro.
                    168: .s
                    169: .sr "putc(c, ioptr) FILE *ioptr
                    170: .it Putc
                    171: writes the character
                    172: .it c
                    173: on the output stream named by
                    174: .it ioptr,
                    175: which is a value returned from
                    176: .it fopen
                    177: or perhaps
                    178: .it stdout
                    179: or
                    180: .it stderr.
                    181: The character is returned as value,
                    182: but EOF is returned on error.
                    183: .s
                    184: .sr "fputc(c, ioptr) FILE *ioptr
                    185: .it Fputc
                    186: acts like
                    187: .it putc
                    188: but is a genuine
                    189: function, not a macro.
                    190: .s
                    191: .sr "fclose(ioptr) FILE *ioptr
                    192: The file corresponding to
                    193: .it ioptr
                    194: is closed after any buffers are emptied.
                    195: A buffer allocated by the IO system is freed.
                    196: .it Fclose
                    197: is automatic on normal termination of the program.
                    198: .s
                    199: .sr "fflush(ioptr) FILE *ioptr
                    200: Any buffered information on the (output) stream named by
                    201: .it ioptr
                    202: is written out.
                    203: Output files are normally buffered
                    204: if and only if they are not directed to the terminal,
                    205: but
                    206: .it stderr
                    207: is unbuffered unless
                    208: .it setbuf
                    209: is used.
                    210: .s
                    211: .sr exit(errcode)
                    212: .it Exit
                    213: terminates the process and returns its argument as status
                    214: to the parent.
                    215: This is a special version of the routine
                    216: which calls
                    217: .it fflush
                    218: for each output file.
                    219: To terminate without flushing,
                    220: use
                    221: .it \_exit.
                    222: .s
                    223: .sr "feof(ioptr) FILE *ioptr
                    224: returns non-zero when end-of-file
                    225: has occurred on the specified input stream.
                    226: .s
                    227: .sr "ferror(ioptr) FILE *ioptr
                    228: returns non-zero when an error has occurred while reading
                    229: or writing the named stream.
                    230: The error indication lasts until the file has been closed.
                    231: .s
                    232: .sr "getchar( )"
                    233: is identical to
                    234: .it "getc(stdin).
                    235: .s
                    236: .sr "putchar(c)"
                    237: is identical to
                    238: .it "putc(c, stdout).
                    239: .s
                    240: .sr "char *gets(s) char *s
                    241: reads characters up to a new-line from the standard input.
                    242: The new-line character is replaced by a null character.
                    243: It is the user's responsibility to make sure that the character array
                    244: .it s
                    245: is large enough.
                    246: .it Gets
                    247: returns its argument, or NULL if end-of-file or error occurred.
                    248: Note that this routine is not compatible with
                    249: .it fgets;
                    250: it is included for downward compatibility.
                    251: .s
                    252: .sr "char *fgets(s, n, ioptr) char *s; FILE *ioptr
                    253: reads up to
                    254: .it n
                    255: characters from the stream
                    256: .it ioptr
                    257: into the character pointer
                    258: .it s.
                    259: The read terminates with a new-line character.
                    260: The new-line character is placed in the buffer
                    261: followed by a null character.
                    262: The first argument,
                    263: or NULL if error or end-of-file occurred,
                    264: is returned.
                    265: .s
                    266: .sr "puts(s) char *s
                    267: writes the null-terminated string (character array)
                    268: .it s
                    269: on the standard output.
                    270: A new-line is appended.
                    271: No value is returned.
                    272: Note that this routine
                    273: is not compatible with
                    274: .it fputs;
                    275: it is included for downward compatibility.
                    276: .s
                    277: .sr "*fputs(s, ioptr) char *s; FILE *ioptr
                    278: writes the null-terminated string (character array)
                    279: .it s
                    280: on the stream
                    281: .it ioptr.
                    282: No new-line is appended.
                    283: No value is returned.
                    284: .s
                    285: .sr "ungetc(c, ioptr) FILE *ioptr
                    286: The argument character
                    287: .it c
                    288: is pushed back on the input stream named by
                    289: .it ioptr.
                    290: Only one character may be pushed back.
                    291: .s
                    292: .sr "printf(format, a1, . . .) char *format
                    293: .sr "fprintf(ioptr, format, a1, . . .) FILE *ioptr; char *format
                    294: .sr "sprintf(s, format, a1, . . .)char *s, *format
                    295: .it Printf
                    296: writes on the standard output.
                    297: .it Fprintf
                    298: writes on the named output stream.
                    299: .it Sprintf
                    300: puts characters in the character array (string)
                    301: named by
                    302: .it s.
                    303: The specifications are as described in section
                    304: .it "printf
                    305: (III)
                    306: of the Unix Programmer's Manual.
                    307: There is a new conversion:
                    308: .it %m.n\fB\|g\fI
                    309: converts a double argument in the style of
                    310: .it e
                    311: or
                    312: .it f
                    313: as most appropriate.
                    314: .s
                    315: .sr "scanf(format, a1, . . .) char *format
                    316: .sr "fscanf(ioptr, format, a1, . . .) FILE *ioptr; char *format
                    317: .sr "sscanf(s, format, a1, . . .) char *s, *format
                    318: .it Scanf
                    319: reads from the standard input.
                    320: .it Fscanf
                    321: reads from the named input stream.
                    322: .it Sscanf
                    323: reads from the character string
                    324: supplied as
                    325: .it s.
                    326: The specifications are identical
                    327: to those of the Portable Library.
                    328: .it Scanf
                    329: reads characters, interprets
                    330: them according to a format, and stores the results in its arguments.
                    331: It expects as arguments
                    332: a control string
                    333: .it format,
                    334: described below,
                    335: and a set of arguments,
                    336: .I
                    337: each of which must be a pointer,
                    338: .R
                    339: indicating where the converted input should be stored.
                    340: .PP
                    341: The
                    342: control string
                    343: usually contains
                    344: conversion specifications, which are used to direct interpretation
                    345: of input sequences.
                    346: The control string may contain:
                    347: .IP 1.
                    348: Blanks, tabs or newlines, which are ignored.
                    349: .IP 2.
                    350: Ordinary characters (not %) which are expected to match
                    351: the next non-space character of the input stream
                    352: (where space characters are defined as blank, tab or newline).
                    353: .IP 3.
                    354: Conversion specifications, consisting of the
                    355: character %, an optional assignment suppressing character \**,
                    356: an optional numerical maximum field width, and a conversion
                    357: character.
                    358: .PP
                    359: A conversion specification is used to direct the conversion of the
                    360: next input field; the result
                    361: is placed in the variable pointed to by the corresponding argument,
                    362: unless assignment suppression was
                    363: indicated by the \** character.
                    364: An input field is defined as a string of non-space characters;
                    365: it extends either to the next space character or until the field
                    366: width, if specified, is exhausted.
                    367: .PP
                    368: The conversion character indicates the interpretation of the
                    369: input field; the corresponding pointer argument must
                    370: usually be of a restricted type.
                    371: The following conversion characters are legal:
                    372: .IP %
                    373: indicates that a single % character is expected
                    374: in the input stream at this point;
                    375: no assignment is done.
                    376: .IP d
                    377: indicates that a decimal integer is expected
                    378: in the input stream;
                    379: the corresponding argument should be an integer pointer.
                    380: .IP o
                    381: indicates that an octal integer is expected in the
                    382: input stream; the corresponding argument should be a integer pointer.
                    383: .IP x
                    384: indicates that a hexadecimal integer is expected in the input stream;
                    385: the corresponding argument should be an integer pointer.
                    386: .ti -0.2i
                    387: .IP s
                    388: indicates that a character string is expected;
                    389: the corresponding argument should be a character pointer
                    390: pointing to an array of characters large enough to accept the
                    391: string and a terminating `\e0', which will be added.
                    392: The input field is terminated by a space character
                    393: or a newline.
                    394: .IP c
                    395: indicates that a character is expected; the
                    396: corresponding argument should be a character pointer;
                    397: the next input character is placed at the indicated spot.
                    398: The normal skip over space characters is suppressed
                    399: in this case;
                    400: to read the next non-space character, try
                    401: .I
                    402: %1s.
                    403: .R
                    404: If a field width is given, the corresponding argument
                    405: should refer to a character array, and the
                    406: indicated number of characters is read.
                    407: .IP e
                    408: (or
                    409: .I f\|\fR)
                    410: .R
                    411: indicates that a floating point number is expected in the input stream;
                    412: the next field is converted accordingly and stored through the
                    413: corresponding argument, which should be a pointer to a
                    414: .it float.
                    415: The input format for
                    416: floating point numbers is
                    417: an optionally signed
                    418: string of digits
                    419: possibly containing a decimal point, followed by an optional
                    420: exponent field beginning with an E or e followed by an optionally signed integer.
                    421: .IP [
                    422: indicates a string not to be delimited by space characters.
                    423: The left bracket is followed by a set of characters and a right
                    424: bracket; the characters between the brackets define a set
                    425: of characters making up the string.
                    426: If the first character
                    427: is not circumflex (\|^\|), the input field
                    428: is all characters until the first character not in the set between
                    429: the brackets; if the first character
                    430: after the left bracket is ^, the input field is all characters
                    431: until the first character which is in the remaining set of characters
                    432: between the brackets.
                    433: The corresponding argument must point to a character array.
                    434: .PP
                    435: The conversion characters
                    436: .I
                    437: d, o
                    438: .R
                    439: and
                    440: .I
                    441: x
                    442: .R
                    443: may be capitalized or preceded
                    444: by
                    445: .I
                    446: l
                    447: .R
                    448: to indicate that a pointer to
                    449: .I
                    450: long
                    451: .R
                    452: rather than
                    453: .I
                    454: int
                    455: .R
                    456: is expected.
                    457: Similarly, the conversion characters
                    458: .I
                    459: e
                    460: .R
                    461: or
                    462: .I
                    463: f
                    464: .R
                    465: may be capitalized or
                    466: preceded by
                    467: .I
                    468: l
                    469: .R
                    470: to indicate that a pointer to 
                    471: .I
                    472: double
                    473: .R
                    474: rather than 
                    475: .I
                    476: float
                    477: .R
                    478: is in the argument list.
                    479: The character
                    480: .I
                    481: h
                    482: .R
                    483: will function similarly in the future to indicate
                    484: .I
                    485: short
                    486: .R
                    487: data items.
                    488: .PP
                    489: For example, the call
                    490: .DS
                    491: int i; float x; char name[50];
                    492: scanf( "%d%f%s", &i, &x, name);
                    493: .DE
                    494: with the input line
                    495: .DS
                    496: 25   54.32E\(mi1  thompson
                    497: .DE
                    498: will assign to
                    499: .it i
                    500: the value
                    501: 25,
                    502: .it x
                    503: the value 5.432, and
                    504: .it name
                    505: will contain
                    506: .it ``thompson\e0''.
                    507: Or,
                    508: .DS
                    509: int i; float x; char name[50];
                    510: scanf("%2d%f%\**d%[1234567890]", &i, &x, name);
                    511: .DE
                    512: with input
                    513: .DS
                    514: 56789 0123 56a72
                    515: .DE
                    516: will assign 56 to
                    517: .it i,
                    518: 789.0 to
                    519: .it x,
                    520: skip ``0123'',
                    521: and place the string ``56\e0'' in
                    522: .it name.
                    523: The next call to
                    524: .it getchar
                    525: will return `a'.
                    526: .PP
                    527: .it Scanf
                    528: returns as its value the number of successfully matched and assigned input
                    529: items.
                    530: This can be used to decide how many input items were found.
                    531: On end of file, EOF is returned; note that this is different
                    532: from 0, which means that the next input character does not
                    533: match what was called for in the control string.
                    534: .s
                    535: .sr "fread(ptr, sizeof(*ptr), nitems, ioptr) FILE *ioptr
                    536: reads
                    537: .it nitems
                    538: of data beginning at
                    539: .it ptr
                    540: from file
                    541: .it ioptr.
                    542: It behaves identically to the Portable Library's
                    543: .it cread.
                    544: No advance notification
                    545: that binary IO is being done is required;
                    546: when, for portability reasons,
                    547: it becomes required, it will be done
                    548: by adding an additional character to the mode-string on the
                    549: fopen call.
                    550: .s
                    551: .sr "fwrite(ptr, sizeof(*ptr), nitems, ioptr) FILE *ioptr
                    552: Like
                    553: .it fread,
                    554: but in the other direction.
                    555: .s
                    556: .sr "rewind(ioptr) FILE *ioptr
                    557: rewinds the stream
                    558: named by
                    559: .it ioptr.
                    560: It is not very useful except on input,
                    561: since a rewound output file is still open only for output.
                    562: .s
                    563: .sr "system(string) char *string
                    564: The
                    565: .it string
                    566: is executed by the shell as if typed at the terminal.
                    567: .s
                    568: .sr "getw(ioptr) FILE *ioptr
                    569: returns the next word from the input stream named by
                    570: .it ioptr.
                    571: EOF is returned on end-of-file or error,
                    572: but since this a perfectly good
                    573: integer
                    574: .it feof
                    575: and
                    576: .it ferror
                    577: should be used.
                    578: .s
                    579: .sr "putw(w, ioptr) FILE *ioptr
                    580: writes the integer
                    581: .it w
                    582: on the named output stream.
                    583: .s
                    584: .sr "setbuf(ioptr, buf) FILE *ioptr; char *buf
                    585: .it Setbuf
                    586: may be used after a stream has been opened
                    587: but before IO has started.
                    588: If
                    589: .it buf
                    590: is NULL,
                    591: the stream will be unbuffered.
                    592: Otherwise the buffer supplied will be used.
                    593: It is a character array of sufficient size:
                    594: .DS
                    595: char   buf[BUFSIZ];
                    596: .DE
                    597: .s
                    598: .sr "fileno(ioptr) FILE *ioptr
                    599: returns the integer file descriptor associated with the file.
                    600: .s
                    601: .sr "fseek(ioptr, offset, ptrname) FILE *ioptr; long offset
                    602: The location of the next byte in the stream
                    603: named by
                    604: .it ioptr
                    605: is adjusted.
                    606: .it Offset
                    607: is a long integer.
                    608: If
                    609: .it ptrname
                    610: is 0, the offset is measured from the beginning of the file;
                    611: if
                    612: .it ptrname
                    613: is 1, the offset is measured from the current read or
                    614: write pointer;
                    615: if
                    616: .it ptrname
                    617: is 2, the offset is measured from the end of the file.
                    618: The routine accounts properly for any buffering.
                    619: (When this routine is used on non-Unix systems,
                    620: the offset must be a value returned from
                    621: .it ftell
                    622: and the ptrname must be 0).
                    623: .s
                    624: .sr "long ftell(ioptr) FILE *ioptr
                    625: The byte offset, measured from the beginning of the file,
                    626: associated with the named stream is returned.
                    627: Any buffering is properly accounted for.
                    628: (On non-Unix systems the value of this call is useful only
                    629: for handing to
                    630: .it fseek,
                    631: so as to position the file to the same place it was when
                    632: .it ftell
                    633: was called.)
                    634: .s
                    635: .sr "getpw(uid, buf) char *buf
                    636: The password file is searched for the given integer user ID.
                    637: If an appropriate line is found, it is copied into
                    638: the character array
                    639: .it buf,
                    640: and 0 is returned.
                    641: If no line is found corresponding to the user ID
                    642: then 1 is returned.
                    643: .s
                    644: .sr "char *calloc(num, size)
                    645: allocates space for
                    646: .it num
                    647: items each of size
                    648: .it size.
                    649: The space is guaranteed to be set to 0 and the pointer is
                    650: sufficiently well aligned to be usable for any purpose.
                    651: NULL is returned if no space is available.
                    652: .s
                    653: .sr "cfree(ptr) char *ptr
                    654: Space is returned to the pool used by
                    655: .it calloc.
                    656: Disorder can be expected if the pointer was not obtained
                    657: from
                    658: .it calloc.
                    659: .LP
                    660: The following are macros defined by stdio.h.
                    661: .s
                    662: .sr isalpha(c)
                    663: returns non-zero if the argument is alphabetic.
                    664: .s
                    665: .sr isupper(c)
                    666: returns non-zero if the argument is upper-case alphabetic.
                    667: .s
                    668: .sr islower(c)
                    669: returns non-zero if the argument is lower-case alphabetic.
                    670: .s
                    671: .sr isdigit(c)
                    672: returns non-zero if the argument is a digit.
                    673: .s
                    674: .sr isspace(c)
                    675: returns non-zero if the argument is a spacing character:
                    676: tab, new-line, carriage return, vertical tab,
                    677: form feed, space.
                    678: .s
                    679: .sr toupper(c)
                    680: returns the upper-case character corresponding to the lower-case
                    681: letter c.
                    682: .s
                    683: .sr tolower(c)
                    684: returns the lower-case character corresponding to the upper-case
                    685: letter c.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.