生如夏花的博客

专注于工业物联网行业数据采集,嵌入式Linux系统裁剪,5G智慧网关软件开发等

APUE(30)

文件IO

本节主要介绍不带缓冲的I/O(unbuffered I/O),不带缓冲指的是每个readwrite都会调用内核中的一个系统调用。

不带缓冲的I/O函数不是ISO C的标准函数,但是是符合POSIX的。

原子操作在多进程之间贡献文件变得相当重要。

主要涉及的函数有oepn, read, write, lseek, close; dup, fcntl, sync, fsync, ioctl

文件和目录

本文描述了文件的属性,主要是struct stat结构体中的相关字段,比如文件所有者ID、文件所属组ID、块大小等。

其次详细描述了文件权限的相关内容,包括文件的基本权限、进程创建、读写文件的权限验证规则以及修改文件权限的相关接口等。

最后是文件系统简介,包含inode、目录项等,以及文件时间,创建删除以及读写目录等。

标准IO

标准I/O库由ISO C标准制定的。标准I/O库相对于系统I/O处理了很多细节,比如缓冲区分配、以优化的块大小执行I/O(这个数据存储在stat结构体中的st_blksize字段)等。

系统I/O是以文件描述符来作为基础展开的,而标准I/O是围绕流进行的,打开或创建文件时会将流和文件关联起来。

获取与流相关的文件描述符可以使用函数fileno()

流和文件相关联为文件流,流和内存关联起来为内存流。

系统数据文件和信息

口令文件/etc/passwd和组文件/etc/group经常被多个进程频繁使用。用户每次登录Linux和使用ls命令都会访问口令文件。

除了直接访问文件之外,系统通过一些接口来对外提供信息,比如系统标识函数、时间和日期函数。

进程关系

本文主要介绍了终端,包括物理终端、模拟终端以及伪终端等。

两种不同的登录方式、即终端登录和网络登录。

重点是进程组、会话以及控制终端之间的联系。

最后是作业控制,作业控制是目前很多类Unix系统都支持的功能。

介绍了shell程序是如何实现作业控制的以及shell运行程序的方式。

信号概述

信号是软件中断。

信号提供了一种处理异步事件的方法。

信号用于大多数复杂的应用程序中。

Unix系统的早期版本就已经提供了信号机制,但不可靠。POSIX.1对可靠信号例程进行了标准化。

可靠信号

可靠信号的处理有两个过程如下:

  1. 信号产生:当这些事件(硬件异常(如除以0)、软件条件(如alarm定时器超时)、终端产生的信号或调用kill函数)发生时,内核会为进程产生一个信号,同时在进程表中设置一个标志。
  2. 信号递送:内核使目标进程对该信号作出反应称为信号递送:或是改变目标进程的执行状态(默认动作),或是开始执行信号处理程序,或两者都是。