Skip to content

Latest commit

 

History

History
24 lines (21 loc) · 1.62 KB

03.md

File metadata and controls

24 lines (21 loc) · 1.62 KB

######第3章 文件 I/O

  • 3.1 引言 UNIX 系统中的大多数文件I/O只需要用到5个函数: open read write lseek close 本章描述的函数称为不带缓冲的I/O,不带缓冲指的是每个 read 和 write 都调用内核中的一个系统调用,这些不带缓冲的I/O函数不是 ISO C 的组成部分,但是他们是 POSIX.1和 Single UNIX Specification 的组成部分。 只要涉及在多进程间共享资源,__原子操作__的概念就变得非常重要。

  • 3.2 文件描述符 对于内核而言,所有打开的文件都通过文件描述符引用。 文件描述符是一个非负整数,当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。 当读写一个文件时,使用open或create返回的文件描述符标识该文件,将其作为参数传送给read或wirte。 按照UNIX惯例把 文件描述符0与进程的标准输入关联, 文件描述符1与标准输出关联, 文件描述符2与标准错误关联。 在符合POSIX.1的应用程序中,幻数0、1、2虽然已被标准化,但应当把它们替换成符号常量 0 => STDIN_FILENO 1 => STDOUT_FILENO 2 => STDERR_FILENO 这些常量定义在 unistd.h 中。 文件描述符的变化范围是0 -> OPEN_MAX-1 。早期的UNIX系统实现采用的上限值是19,现在很多系统将其上限值增加至63. 对于FreeBSD 8.0、Linux 3.2.0、Mac OS X 10.6.8以及Solaris 10,文件描述符的变化范围几乎是无限的,它只受到系统配置的存储器总量、整型的字长以及系统管理员所配置的软限制和硬限制约束。

  • 3.3 函数 open 和 openat