C PROGRAMMERS ON GNU/LINUX HAVE TWO SETS OF INPUT/OUTPUT functions at
their disposal.The standard C library provides I/O functions: printf, fopen, and so
on.1 The Linux kernel itself provides another set of I/O operations that operate at a
lower level than the C library functions.
Because this book is for people who already know the C language, we’ll assume
that you have encountered and know how to use the C library I/O functions.
Often there are good reasons to use Linux’s low-level I/O functions. Many of these
are kernel system calls2 and provide the most direct access to underlying system capa-
bilities that is available to application programs. In fact, the standard C library I/O
routines are implemented on top of the Linux low-level I/O system calls. Using the
latter is usually the most efficient way to perform input and output operations—and is
sometimes more convenient, too.
1.The C++ standard library provides iostreams with similar functionality.The standard C
library is also available in the C++ language.
2. See Chapter 8,“Linux System Calls,” for an explanation of the difference between a system
call and an ordinary function call.
282 Appendix B
Throughout this book, we assume that you’re familiar with the calls described in this
appendix.You may already be familiar with them because they’re nearly the same as
those provided on other UNIX and UNIX-like operating systems (and on the Win32
platform as well). If you’re not familiar with them, however, read on; you’ll find the
rest of the book much easier to understand if you familiarize yourself with this
B.1 Reading and Writing Data
The first I/O function you likely encountered when you first learned the C language
was printf.This formats a text string and then prints it to standard output.The gener-
alized version, fprintf, can print the text to a stream other than standard output.A
stream is represented by a FILE* pointer.You