UNIX File I/O

File I/O system calls

open

Example (taken from man open in Linux):

#include <fcntl.h>
...
int fd;
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
char *pathname = "/tmp/file";
...
fd = open(pathname, O_WRONLY | O_CREAT | O_TRUNC, mode);
...

Another example – creating a lock file:

fd = open("/var/run/myprog.pid", O_WRONLY | O_CREAT | O_EXCL, 0644);

creat

Redundant: creat(path, mode) is equivalent to open(path, O_WRONLY|O_CREAT|O_TRUNC, mode)

And it should have been called create, says Ken Thompson

close

int close(int fildes);

lseek

off_t lseek(int fildes, off_t offset, int whence);

read

ssize_t read(int fildes, void *buf, size_t nbyte);

Note:

write

ssize_t write(int fildes, const void *buf, size_t nbyte);

Note:

File sharing

  1. Kernel data structures for open files

    Figure 3.7, APUE
    Figure 3.7, APUE
  2. Two independent processes with the same file open

    Figure 3.8, APUE
    Figure 3.8, APUE
  3. Kernel data structures after dup(1)

    Figure 3.9, APUE
    Figure 3.9, APUE
  4. Sharing of open files between parent and child after fork

    Figure 8.2, APUE
    Figure 8.2, APUE

Last updated: 2019–01–28