#include #include #include #include #include #include "syscalls.h" /* The C Programming Language: 2nd Edition * * Exercise 8-3: Design and write `_flushbuf`, `fflush`, and `fclose`. * * Notes: Not much guidance here, eh? :) We'll want to consult manpages. * * _flushbuf returns 0 on success, -1 on failure. * fflush flushes a buffer, or *all* buffers * fclose does housekeeping on _iob members so fds can be juggled * * Since work done in these exercises is predominantly in a header file, the * final implementation is used for all exercises that rely on it. Attempts * have been made to demonstrate *what* is being done, but it's difficult to do * so without creating side effects inside the buffers themselves. Trust that * if this file outputs its own source, everything is fine. */ int main() { /* Let's copy 8-2's exercise but get a different look on the buffer. */ /* show the contents of buffers before and after flush */ FILE *fp = fopen("8-03_fflush-and-fclose.c", "r"); if (fp != NULL) { char c; while ((c = getc(fp)) != EOF) { putchar(c); } /* fclose calls fflush */ fclose(fp); fclose(stdout); } else { puts("Could not open file for reading."); } return 0; }