低级输入输出
Posted followyou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了低级输入输出相关的知识,希望对你有一定的参考价值。
低级输入输出
标准I/O函数提供了丰富便捷的输入输出函数,但有时并不需要标准I/O函数提供的数据转换和缓冲处理,某些特殊操作需要UNIX的输入输出系统调用,这些系统调用习惯上成为低级I/O函数。(我觉得理解为底层I/O函数更贴切)
低级I/O函数对文件描述字进行操作,其中有些函数是实现标准I/O函数的初等函数,另外一些执行低级控制操作。
文件描述字的打开、创建和关闭
打开创建
open()、create()用于打开或创建一个文件描述字
参数flags给出文件的打开方式,mode是可选参数,给出文件的访问方式。
参数flags说明:
open()返回的文件描述字是唯一的,不为由正在运行的其他进程所共享。若两个进程同时打开一个文件,系统保证它们有各自的文件描述字。如果两进程都写这个文件,它们将按自己的文件位置来写,写入的数据不会交错的记录在文件内
而是一个被另一个覆盖。 为避免覆盖,可以利用文件锁来协调。
fd=craete(filename)
等价于
fd=open(filename, O_WRONLY|O-CREATE|O_TRUNC, mode);
函数close用于关闭已打开的文件描述字
关闭文件描述字意味下面一系列动作:
- 释放描述字fledes,此描述字可被后继的open()再次使用;
- 释放进程在此文件上战友的所有文件锁;
- 当与管道或IFIO相连的所有文件描述字均被关闭时,废弃任何还在管道或IFIO上的数据。
进程终止时也会自动关闭该进程打开的所有文件,因此可利用该特征而不明显的调用close()关闭文件。
类似标准流,每个进程预先打开三个文件描述字:0、1、2,分别打开标准输入、标准输出、标准错误输出。符号常数STDIN_FILENO、STDOUT_FILENO和STDERROR_FILENO分别表示这三个文件描述字。
内核为管理文件的打开和关闭使用三种数据结构
- 每个活跃进程在系统的进程表中有一个登记项,称为进程表项。
- 每当open()成功打开一个文件时,便在系统文件表中建立一个打开文件表项。
每个表项代表一个一打开的文件,包含信息:- 文件状态标签。标签由open()的第二个参数指定。
- 当前文件位置
- 指向该文件的的指针
- 每一个打开文件都有一个vnode结构。
以上是关于低级输入输出的主要内容,如果未能解决你的问题,请参考以下文章