|
|
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.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.