Unix I/O
所有的I/O设备都被模型化为文件,因此所有的输入和输出操作都被当做对相应文件的读和写来执行,这种方式称为Unix I/O
,其使得所有的输入和输出都能以一种统一且一致的方式来进行
文件
包含:
-
普通文件:又分为
文本文件
和二进制文件
-
目录:包含一组
链接
的文件,其中每一个链接都将一个文件名映射到一个文件,这个文件还有可能是一个目录 - 套接字:用来与另一个进程进行跨网络通信的文件
打开文件
通过open函数
来打开一个已存在的文件或创建一个新的文件,包含以下几种方式:
- O_RDONLY:只读
- O_WRONLY:只写
- O_RDWR:可读可写
- O_CREAT:如果文件不存在,就创建它的一个截断文件
- O_TRUNC:如果文件存在,就截断它
- O_APPEND:在每次写操作前,设置文件的位置到文件的结尾
通过close函数
关闭一个打开的文件
读写文件
通过read函数
从描述符为fd的当前文件位置复制最多n个字节到内存位置buf,返回-1
表示一个错误,而返回0表示EOF
,否则返回值表示的是实际传送的字节数量
通过write函数
从内存位置buf复制最多n个字符到描述符为fd的当前文件位置
共享文件
Linux内核用三个相关的数据结构来表示打开的文件:
- 描述符表:每个进程都有它独立的描述符表,它的表项是由进程开发的文件描述来索引的
- 文件表:打开文件的集合是由一张文件表来表示的,所有的进程共享这张表
- v-node表:所有的进程都共享这张表,每个表项包含stat结构中的大部分信息
I/O 重定向
I/O 重定向操作符允许用户将磁盘文件和标准输入输出联系起来
在代码中可以使用dup2函数
来实现
网友评论