1 POSIX 可移植的操作系统接口。
这三个常量必须选一个,其他可选常量在p60
2 限制 由于大量标准化的工作,若干可移植的方法确定幻数和实现定义的限制。
(1)编译时限制(2)运行时限制 这两类是必须限制。
ISO C限制 ISO C限制是编译时限制。<limits.h>中定义了C标准限制。
POSIX限制
3 基本系统数据类型
头文件<sys/types.h>中定义了某些与实现有关的数据类型。他们都是用typedef来定义的,绝大多数以_t结尾。
1 大多数文件I/O只用5个函数:open,read,write,lseek,close.
2 不带缓冲 每个read和write都只调用内核中的一个系统调用。不带缓冲的I/O不是ISO C 的组成部分,他们是POSIX.1和UNIX Specification的组成部分。
3.2文件描述符
1 一个非负整数,打开和创建一个文件时由系统产生,标志此文件,并可传给write和read引用。
其中0与进程的标准输入关联,1与标准输出关联,2与标准出错输出关联。并换成常量符号,在<unistd.h>中定义。其变化范围是0~OPEN_MAX.
3.3 open函数
对于open函数,当创建新的文件才用第三个参数。
pathname是文件的名字。
3.4 creat函数
3.5close函数
当一个进程终止时,内核自动关闭它打开的文件,因此许多程序不显式用close关闭文件。
3.6lseek函数
用于设置偏移量度量从文件开始处计算的字节数,开始默认设为0.
对于某些设备偏移量可以是负值,所以检测是否失败,应该用-1.
3.7 read函数
3.8write函数
3.10 文件共享
每个进程都有一个文件表,但共用一个v节点。
3.11 原子操作
内核会对每次write时,将文件改到文件尾,已解决多个进程写的逻辑问题。
3.12 dup和dup2函数
都是用来复制现存的文件描述符。
3.13
sync函数只是将所有修改过的块缓冲区排入写队列。
3.14 fcntl函数
用于改变已打开文件的性质。
3.15 ioctl函数
3.16 /dev/fd 打开文件/dev/fd/n等效于复制描述符n