unix环境高级编程

第3章 文件IO

  1. unix系统shell把文件描述符0与进程的标准输入关联,文件描述符1与进程的标准输出关联
  2. open和 openat函数返回的文件描述符一定是最小的未用的描述符数值

3.

1
ISO C中void *表示通用指针

  1. 文件偏移量可以大于当前文件的长度,在这种情况下,对该文件的下一次写将加长该文件,并在文件中构成一个空洞,位于文件中但没有写过的字节都被读为0

    1
    2
    3
    STDIN_FILENO 标准输入
    STDOUT_FILENO 标准输出
    STDERR_FILENO 标准错误
  2. unix支持在不同进程之间共享打开文件

  3. 内核使用三种数据结构表示打开文件
  4. 每个进程在进程表中都有一个记录项
  • 文件描述符标志
  • 指向一个文件表项的指针
  1. 内核为所有打开文件维持一张文件表,包含
  • 文件标志状态
  • 当前文件偏移量
  • 指向文件v节点表项的指针
  1. 每个打开文件或设备都有一个v节点结构
  • 文件类型
  • 对文件进行各种操作的函数指针
  • 大多数文件都有i节点(索引节点)
  • 包含了文件的所有者,文件长度,指向文件实际数据块在磁盘上所在位置的指针
  1. 在unix系统中,通常write只是将数据排入队列,而实际的写磁盘操作可能在以后的某个时刻进行。而数据库系统需要使用O_SYVN,这样一来,当它从write返回的时候数据就已经写到磁盘上了
  2. 打开文件/dev/fd/n等效于复制描述符n(假设n是打开的)