|
|
1.1 root 1: .\" @(#)p9 6.1 (Berkeley) 4/25/86
2: .\"
3: .sp 100
4: .TL
5: .ft R
6: Appendix \(em The Standard I/O Library
7: .AU
8: D. M. Ritchie
9: .AI
10: .MH
11: .PP
12: The standard I/O library
13: was designed with the following goals in mind.
14: .IP 1.
15: It must be as efficient as possible, both in time and in space,
16: so that there will be no hesitation in using it
17: no matter how critical the application.
18: .IP 2.
19: It must be simple to use, and also free of the magic
20: numbers and mysterious calls
21: whose use mars the understandability and portability
22: of many programs using older packages.
23: .IP 3.
24: The interface provided should be applicable on all machines,
25: whether or not the programs which implement it are directly portable
26: to other systems,
27: or to machines other than the PDP-11 running a version of
28: .UC UNIX .
29: .SH
30: 1. General Usage
31: .PP
32: Each program using the library must have the line
33: .P1
34: #include <stdio.h>
35: .P2
36: which defines certain macros and variables.
37: The routines are in the normal C library,
38: so no special library argument is needed for loading.
39: All names in the include file intended only for internal use begin
40: with an underscore
41: .UL _
42: to reduce the possibility
43: of collision with a user name.
44: The names intended to be visible outside the package are
45: .IP \f3stdin\f1 10
46: The name of the standard input file
47: .IP \f3stdout\f1 10
48: The name of the standard output file
49: .IP \f3stderr\f1 10
50: The name of the standard error file
51: .IP \f3EOF\f1 10
52: is actually \-1, and is the value returned by
53: the read routines on end-of-file or error.
54: .IP \f3NULL\f1 10
55: is a notation for the null pointer, returned by
56: pointer-valued functions
57: to indicate an error
58: .IP \f3FILE\f1 10
59: expands to
60: .UL struct
61: .UL _iob
62: and is a useful
63: shorthand when declaring pointers
64: to streams.
65: .IP \f3BUFSIZ\f1 10
66: is a number (viz. 512)
67: of the size suitable for an I/O buffer supplied by the user.
68: See
69: .UL setbuf ,
70: below.
71: .IP \f3getc,\ getchar,\ putc,\ putchar,\ feof,\ ferror,\ f\&ileno\f1 10
72: .br
73: are defined as macros.
74: Their actions are described below;
75: they are mentioned here
76: to point out that it is not possible to
77: redeclare them
78: and that they are not actually functions;
79: thus, for example, they may not have breakpoints set on them.
80: .PP
81: The routines in this package
82: offer the convenience of automatic buffer allocation
83: and output flushing where appropriate.
84: The names
85: .UL stdin ,
86: .UL stdout ,
87: and
88: .UL stderr
89: are in effect constants and may not be assigned to.
90: .SH
91: 2. Calls
92: .nr PD .4v
93: .LP
94: .UL FILE\ *fopen(filename,\ type)\ char\ *filename,\ *type;
95: .nr PD 0
96: .IP
97: .br
98: opens the file and, if needed, allocates a buffer for it.
99: .UL filename
100: is a character string specifying the name.
101: .UL type
102: is a character string (not a single character).
103: It may be
104: .UL \&"r" ,
105: .UL \&"w" ,
106: or
107: .UL \&"a"
108: to indicate
109: intent to read, write, or append.
110: The value returned is a file pointer.
111: If it is
112: .UL NULL
113: the attempt to open failed.
114: .ne 3
115: .nr PD .4v
116: .LP
117: .UL FILE\ *freopen(filename,\ type,\ ioptr)\ char\ *filename,\ *type;\ FILE\ *ioptr;
118: .nr PD 0
119: .IP
120: .br
121: The stream named by
122: .UL ioptr
123: is closed, if necessary, and then reopened
124: as if by
125: .UL fopen .
126: If the attempt to open fails,
127: .UL NULL
128: is returned,
129: otherwise
130: .UL ioptr ,
131: which will now refer to the new file.
132: Often the reopened stream is
133: .UL stdin
134: or
135: .UL stdout .
136: .nr PD .4v
137: .LP
138: .UL int\ getc(ioptr)\ FILE\ *ioptr;
139: .nr PD 0
140: .IP
141: returns the next character from the stream named by
142: .UL ioptr ,
143: which is a pointer to a file such as returned by
144: .UL fopen ,
145: or the name
146: .UL stdin .
147: The integer
148: .UL EOF
149: is returned on end-of-file or when
150: an error occurs.
151: The null character
152: .UL \e0
153: is a legal character.
154: .nr PD .4v
155: .LP
156: .UL int\ fgetc(ioptr)\ FILE\ *ioptr;
157: .nr PD 0
158: .IP
159: .br
160: acts like
161: .UL getc
162: but is a genuine function,
163: not a macro,
164: so it can be pointed to, passed as an argument, etc.
165: .nr PD .4v
166: .LP
167: .UL putc(c,\ ioptr)\ FILE\ *ioptr;
168: .nr PD 0
169: .IP
170: .br
171: .UL putc
172: writes the character
173: .UL c
174: on the output stream named by
175: .UL ioptr ,
176: which is a value returned from
177: .UL fopen
178: or perhaps
179: .UL stdout
180: or
181: .UL stderr .
182: The character is returned as value,
183: but
184: .UL EOF
185: is returned on error.
186: .nr PD .4v
187: .LP
188: .UL fputc(c,\ ioptr)\ FILE\ *ioptr;
189: .nr PD 0
190: .IP
191: .br
192: acts like
193: .UL putc
194: but is a genuine
195: function, not a macro.
196: .nr PD .4v
197: .LP
198: .UL fclose(ioptr)\ FILE\ *ioptr;
199: .nr PD 0
200: .IP
201: .br
202: The file corresponding to
203: .UL ioptr
204: is closed after any buffers are emptied.
205: A buffer allocated by the I/O system is freed.
206: .UL fclose
207: is automatic on normal termination of the program.
208: .nr PD .4v
209: .LP
210: .UL fflush(ioptr)\ FILE\ *ioptr;
211: .nr PD 0
212: .IP
213: .br
214: Any buffered information on the (output) stream named by
215: .UL ioptr
216: is written out.
217: Output files are normally buffered
218: if and only if they are not directed to the terminal;
219: however,
220: .UL stderr
221: always starts off unbuffered and remains so unless
222: .UL setbuf
223: is used, or unless it is reopened.
224: .nr PD .4v
225: .LP
226: .UL exit(errcode);
227: .nr PD 0
228: .IP
229: .br
230: terminates the process and returns its argument as status
231: to the parent.
232: This is a special version of the routine
233: which calls
234: .UL fflush
235: for each output file.
236: To terminate without flushing,
237: use
238: .UL _exit .
239: .nr PD .4v
240: .LP
241: .UL feof(ioptr)\ FILE\ *ioptr;
242: .nr PD 0
243: .IP
244: .br
245: returns non-zero when end-of-file
246: has occurred on the specified input stream.
247: .nr PD .4v
248: .LP
249: .UL ferror(ioptr)\ FILE\ *ioptr;
250: .nr PD 0
251: .IP
252: .br
253: returns non-zero when an error has occurred while reading
254: or writing the named stream.
255: The error indication lasts until the file has been closed.
256: .nr PD .4v
257: .LP
258: .UL getchar();
259: .nr PD 0
260: .IP
261: .br
262: is identical to
263: .UL getc(stdin) .
264: .nr PD .4v
265: .LP
266: .UL putchar(c);
267: .nr PD 0
268: .IP
269: .br
270: is identical to
271: .UL putc(c,\ stdout) .
272: .nr PD .4v
273: .nr PD .4v
274: .ne 2
275: .LP
276: .UL char\ *fgets(s,\ n,\ ioptr)\ char\ *s;\ FILE\ *ioptr;
277: .nr PD 0
278: .IP
279: .br
280: reads up to
281: .UL n-1
282: characters from the stream
283: .UL ioptr
284: into the character pointer
285: .UL s .
286: The read terminates with a newline character.
287: The newline character is placed in the buffer
288: followed by a null character.
289: .UL fgets
290: returns the first argument,
291: or
292: .UL NULL
293: if error or end-of-file occurred.
294: .nr PD .4v
295: .nr PD .4v
296: .LP
297: .UL fputs(s,\ ioptr)\ char\ *s;\ FILE\ *ioptr;
298: .nr PD 0
299: .IP
300: .br
301: writes the null-terminated string (character array)
302: .UL s
303: on the stream
304: .UL ioptr .
305: No newline is appended.
306: No value is returned.
307: .nr PD .4v
308: .LP
309: .UL ungetc(c,\ ioptr)\ FILE\ *ioptr;
310: .nr PD 0
311: .IP
312: .br
313: The argument character
314: .UL c
315: is pushed back on the input stream named by
316: .UL ioptr .
317: Only one character may be pushed back.
318: .ne 5
319: .nr PD .4v
320: .LP
321: .UL printf(format,\ a1,\ ...)\ char\ *format;
322: .br
323: .UL fprintf(ioptr,\ format,\ a1,\ ...)\ FILE\ *ioptr;\ char\ *format;
324: .br
325: .UL sprintf(s,\ format,\ a1,\ ...)char\ *s,\ *format;
326: .br
327: .nr PD 0
328: .IP
329: .UL printf
330: writes on the standard output.
331: .UL fprintf
332: writes on the named output stream.
333: .UL sprintf
334: puts characters in the character array (string)
335: named by
336: .UL s .
337: The specifications are as described in section
338: .UL printf (3)
339: of the
340: .ul
341: .UC UNIX
342: .ul
343: Programmer's Manual.
344: .nr PD .4v
345: .LP
346: .UL scanf(format,\ a1,\ ...)\ char\ *format;
347: .br
348: .UL fscanf(ioptr,\ format,\ a1,\ ...)\ FILE\ *ioptr;\ char\ *format;
349: .br
350: .UL sscanf(s,\ format,\ a1,\ ...)\ char\ *s,\ *format;
351: .nr PD 0
352: .IP
353: .br
354: .UL scanf
355: reads from the standard input.
356: .UL fscanf
357: reads from the named input stream.
358: .UL sscanf
359: reads from the character string
360: supplied as
361: .UL s .
362: .UL scanf
363: reads characters, interprets
364: them according to a format, and stores the results in its arguments.
365: Each routine expects as arguments
366: a control string
367: .UL format ,
368: and a set of arguments,
369: .I
370: each of which must be a pointer,
371: .R
372: indicating where the converted input should be stored.
373: .if t .sp .4v
374: .UL scanf
375: returns as its value the number of successfully matched and assigned input
376: items.
377: This can be used to decide how many input items were found.
378: On end of file,
379: .UL EOF
380: is returned; note that this is different
381: from 0, which means that the next input character does not
382: match what was called for in the control string.
383: .RE
384: .nr PD .4v
385: .LP
386: .UL fread(ptr,\ sizeof(*ptr),\ nitems,\ ioptr)\ FILE\ *ioptr;
387: .nr PD 0
388: .IP
389: .br
390: reads
391: .UL nitems
392: of data beginning at
393: .UL ptr
394: from file
395: .UL ioptr .
396: No advance notification
397: that binary I/O is being done is required;
398: when, for portability reasons,
399: it becomes required, it will be done
400: by adding an additional character to the mode-string on the
401: .UL fopen
402: call.
403: .nr PD .4v
404: .LP
405: .UL fwrite(ptr,\ sizeof(*ptr),\ nitems,\ ioptr)\ FILE\ *ioptr;
406: .nr PD 0
407: .IP
408: .br
409: Like
410: .UL fread ,
411: but in the other direction.
412: .nr PD .4v
413: .LP
414: .UL rewind(ioptr)\ FILE\ *ioptr;
415: .nr PD 0
416: .IP
417: .br
418: rewinds the stream
419: named by
420: .UL ioptr .
421: It is not very useful except on input,
422: since a rewound output file is still open only for output.
423: .nr PD .4v
424: .LP
425: .UL system(string)\ char\ *string;
426: .nr PD 0
427: .IP
428: .br
429: The
430: .UL string
431: is executed by the shell as if typed at the terminal.
432: .nr PD .4v
433: .LP
434: .UL getw(ioptr)\ FILE\ *ioptr;
435: .nr PD 0
436: .IP
437: .br
438: returns the next word from the input stream named by
439: .UL ioptr .
440: .UL EOF
441: is returned on end-of-file or error,
442: but since this a perfectly good
443: integer
444: .UL feof
445: and
446: .UL ferror
447: should be used.
448: A ``word'' is 16 bits on the
449: .UC PDP-11.
450: .nr PD .4v
451: .LP
452: .UL putw(w,\ ioptr)\ FILE\ *ioptr;
453: .nr PD 0
454: .IP
455: .br
456: writes the integer
457: .UL w
458: on the named output stream.
459: .nr PD .4v
460: .LP
461: .UL setbuf(ioptr,\ buf)\ FILE\ *ioptr;\ char\ *buf;
462: .nr PD 0
463: .IP
464: .br
465: .UL setbuf
466: may be used after a stream has been opened
467: but before I/O has started.
468: If
469: .UL buf
470: is
471: .UL NULL ,
472: the stream will be unbuffered.
473: Otherwise the buffer supplied will be used.
474: It must be a character array of sufficient size:
475: .P1
476: char buf[BUFSIZ];
477: .P2
478: .nr PD .4v
479: .LP
480: .UL fileno(ioptr)\ FILE\ *ioptr;
481: .nr PD 0
482: .IP
483: .br
484: returns the integer file descriptor associated with the file.
485: .nr PD .4v
486: .LP
487: .UL fseek(ioptr,\ offset,\ ptrname)\ FILE\ *ioptr;\ long\ offset;
488: .nr PD 0
489: .IP
490: .br
491: The location of the next byte in the stream
492: named by
493: .UL ioptr
494: is adjusted.
495: .UL offset
496: is a long integer.
497: If
498: .UL ptrname
499: is 0, the offset is measured from the beginning of the file;
500: if
501: .UL ptrname
502: is 1, the offset is measured from the current read or
503: write pointer;
504: if
505: .UL ptrname
506: is 2, the offset is measured from the end of the file.
507: The routine accounts properly for any buffering.
508: (When this routine is used on
509: .UC UNIX \& non-
510: systems,
511: the offset must be a value returned from
512: .UL ftell
513: and the ptrname must be 0).
514: .ne 3
515: .nr PD .4v
516: .LP
517: .UL long\ ftell(ioptr)\ FILE\ *ioptr;
518: .nr PD 0
519: .IP
520: .br
521: The byte offset, measured from the beginning of the file,
522: associated with the named stream is returned.
523: Any buffering is properly accounted for.
524: (On
525: .UC UNIX \& non-
526: systems the value of this call is useful only
527: for handing to
528: .UL fseek ,
529: so as to position the file to the same place it was when
530: .UL ftell
531: was called.)
532: .nr PD .4v
533: .LP
534: .UL getpw(uid,\ buf)\ char\ *buf;
535: .nr PD 0
536: .IP
537: .br
538: The password file is searched for the given integer user ID.
539: If an appropriate line is found, it is copied into
540: the character array
541: .UL buf ,
542: and 0 is returned.
543: If no line is found corresponding to the user ID
544: then 1 is returned.
545: .nr PD .4v
546: .LP
547: .UL char\ *malloc(num);
548: .nr PD 0
549: .IP
550: .br
551: allocates
552: .UL num
553: bytes.
554: The pointer returned is sufficiently well aligned to be usable for any purpose.
555: .UL NULL
556: is returned if no space is available.
557: .nr PD .4v
558: .LP
559: .UL char\ *calloc(num,\ size);
560: .nr PD 0
561: .IP
562: .br
563: allocates space for
564: .UL num
565: items each of size
566: .UL size .
567: The space is guaranteed to be set to 0 and the pointer is
568: sufficiently well aligned to be usable for any purpose.
569: .UL NULL
570: is returned if no space is available .
571: .nr PD .4v
572: .LP
573: .UL cfree(ptr)\ char\ *ptr;
574: .nr PD 0
575: .IP
576: .br
577: Space is returned to the pool used by
578: .UL calloc .
579: Disorder can be expected if the pointer was not obtained
580: from
581: .UL calloc .
582: .nr PD .4v
583: .LP
584: The following are macros whose definitions may be obtained by including
585: .UL <ctype.h> .
586: .nr PD .4v
587: .LP
588: .UL isalpha(c)
589: returns non-zero if the argument is alphabetic.
590: .nr PD .4v
591: .LP
592: .UL isupper(c)
593: returns non-zero if the argument is upper-case alphabetic.
594: .nr PD .4v
595: .LP
596: .UL islower(c)
597: returns non-zero if the argument is lower-case alphabetic.
598: .nr PD .4v
599: .LP
600: .UL isdigit(c)
601: returns non-zero if the argument is a digit.
602: .nr PD .4v
603: .LP
604: .UL isspace(c)
605: returns non-zero if the argument is a spacing character:
606: tab, newline, carriage return, vertical tab,
607: form feed, space.
608: .nr PD .4v
609: .LP
610: .UL ispunct(c)
611: returns non-zero if the argument is
612: any punctuation character, i.e., not a space, letter,
613: digit or control character.
614: .nr PD .4v
615: .LP
616: .UL isalnum(c)
617: returns non-zero if the argument is a letter or a digit.
618: .nr PD .4v
619: .LP
620: .UL isprint(c)
621: returns non-zero if the argument is printable \(em
622: a letter, digit, or punctuation character.
623: .nr PD .4v
624: .LP
625: .UL iscntrl(c)
626: returns non-zero if the argument is a control character.
627: .nr PD .4v
628: .LP
629: .UL isascii(c)
630: returns non-zero if the argument is an ascii character, i.e., less than octal 0200.
631: .nr PD .4v
632: .LP
633: .UL toupper(c)
634: returns the upper-case character corresponding to the lower-case
635: letter
636: .UL c.
637: .nr PD .4v
638: .LP
639: .UL tolower(c)
640: returns the lower-case character corresponding to the upper-case
641: letter
642: .UL c .
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.