Team BBL
Previous Page Next Page

Chapter 5

5.2

The fgets function reads up through and including the next newline or until the buffer is full (leaving room, of course, for the terminating null). Also, fputs writes everything in the buffer until it hits a null byte; it doesn't care whether a newline is in the buffer. So, if MAXLINE is too small, both functions still work; they're just called more often than they would be if the buffer were larger.

If either of these functions removed or added the newline (as gets and puts do), we would have to ensure that our buffer was big enough for the largest line.

5.3

The function call

   printf("");

returns 0, since no characters are output.

5.4

This is a common error. The return value from getc and getchar is an int, not a char. EOF is often defined to be -1, so if the system uses signed characters, the code normally works. But if the system uses unsigned characters, after the EOF returned by getchar is stored as an unsigned character, the character's value no longer equals -1, so the loop never terminates. The four platforms described in this book all use signed characters, so the example code works on these platforms.

5.5

A 5-character prefix, a 4-character per process unique identifier, and a 5-character per system unique identifier (the process ID) equals 14 characters, the original UNIX System limit on the length of a filename.

5.6

Call fsync after each call to fflush. The argument to fsync is obtained with the fileno function. Calling fsync without calling fflush might do nothing if all the data were still in memory buffers.

5.7

Standard input and standard output are both line buffered when a program is run interactively. When fgets is called, standard output is flushed automatically.

    Team BBL
    Previous Page Next Page