3.1 | When reading or writing a disk file, are the functions described in this chapter really unbuffered? Explain. |
Section 3.12, without calling the fcntl function. Be sure to handle errors correctly. |
3.3 | Assume that a process executes the following three function calls:fd1 = open(pathname, oflags); fd2 = dup(fd1); fd3 = open(pathname, oflags); Draw the resulting picture, similar to Figure 3.8. Which descriptors are affected by an fcntl on fd1 with a command of F_SETFD? Which descriptors are affected by an fcntl on fd1 with a command of F_SETFL? |
3.4 | The following sequence of code has been observed in various programs:dup2(fd, 0); dup2(fd, 1); dup2(fd, 2); if (fd > 2) close(fd); To see why the if test is needed, assume that fd is 1 and draw a picture of what happens to the three descriptor entries and the corresponding file table entry with each call to dup2. Then assume that fd is 3 and draw the same picture. |
3.5 | The Bourne shell, Bourne-again shell, and Korn shell notationdigit1 >&digit2 says to redirect descriptor digit1 to the same file as descriptor digit2 . What is the difference between the two commands./a.out > outfile 2>&1 ./a.out 2>&1 > outfile (Hint: the shells process their command lines from left to right.) |
3.6 | If you open a file for readwrite with the append flag, can you still read from anywhere in the file using lseek? Can you use lseek to replace existing data in the file? Write a program to verify this. |