LINUX/UNIX系统编程手册读书笔记(一)

第二章:基本概念

内核

用户态——->内核态

  1. 系统调用
  2. 异常
  3. 外围设备中断

进程

组成(段)

  • 文件
  • 数据

进程间通信(IPC)

  • 信号
    • 用户键入中断字符
    • 进程的子进程之一终止
    • 进程设定的定时器到期
    • 进程尝试访问无效地址
  • 管道和FIFO
  • 套接字
  • 文件锁定
  • 消息对列
  • 信号量
  • 共享内存

第四章:文件I/O

文件描述符 用途 POSIX名称 stdio流
0 标准输入 STDIN_FILENO stdin
1 标准输出 STDOUT_FILENO stdout
2 标准错误 STDERR_FILENO stderr
1
int open(const char *pathname, int flags, mode_t mode); //returns file description on success, or -1 on error
1
ssize_t read(int fd, void *buffer, size_t count); //returns number of bytes read, 0 on EOF, or -1 on error
1
ssize_t write(int fd, void *buffer, size_t count); //returns number of bytes written, or -1 on error
1
int close(int fd);  //returns 0 on success, or -1 on error
1
off_t lseek(int fd, off_t offset, int whence); //returns new file offset if successful, or -1 on error

whence参数

  • SEEK_SET 将偏移位设置从文件头开始的offset个字节。
  • SEEK_CUR 相对当前调整offset个字节。
  • SEEK_END 将文件偏移量设置为起始于尾部的offset个字节。

第五章:深入文件I/O

内核维护的个文件结构:

  • 进程级的文件描述符表 (open file descriptor)
    • 文件描述符
    • 指针
  • 系统级的打开文件表(open file table)
    • 当前文件偏移量(read,write时更新,lseek修改)
    • 打开文件时的状态标志(open()时的flags参数)
    • 文件访问模式(read-only, write-only or read & write)
    • 与信号驱动I/O相关的设置
    • 对该文件i-node对象的引用
  • 文件系统的i-node表
    • 文件类型
    • 指向锁列表的指针
    • 文件属性

两个不同的文件描述符,若指向同一打开的句柄,将共享同一文件偏移量。(一个改了,另一个也会被改变)

复制文件描述符

1
int dup(int oldfd); //return new file descriptor on success
1
int dup2(int oldfd, int newfd); return new file descriptor on success
1
int dup3(int oldfd, int newfd, int flags);