In user space, when open a file, user program will get a file descriptor (a
integer) that represent that file. User can use this descriptor to perform various
operations on this file: read, write, seek, etc. As I see it, this design is
quite clean in that:
-
Hide most of the details from user, for both safety and simplicity
-
Enable more high level abstraction: everything (socket, pipe..) is a file
The file descriptor is actually an index to kernel space structure that
contains all the details of opened files. So at kernel side, we need to do a
lot bookkeeping stuff.
more ...