In this chapter, we extend the discussion of file I/O that we started in the previous chapter.
In continuing the discussion of the open() system call, we explain the concept of atomicity—the notion that the actions performed by a system call are executed as a single uninterruptible step. This is a necessary requirement for the correct operation of many system calls.
We introduce another file-related system call, the multipurpose fcntl(), and show one of its uses: fetching and setting open file status flags.
Next, we look at the kernel data structures used to represent file descriptors and open files. Understanding the relationship between these structures clarifies some of the subtleties of file I/O discussed ...