Linux文件---文件IO概述

来源:互联网 发布:java软件测试 编辑:程序博客网 时间:2024/06/08 16:44

Linux文件I/O概述

  • 1、POSIX规范

POSIX(Portable Operating System Interface,可移植操作系统接口规范)标准最初由IEEE(Institute of Electrical and Electronics Engineers,电气和电子工程师协会,是目前最大的全球性非营利性专业技术学会)制定,目的是提高UNIX环境下程序的可移植性。通俗来讲,为一个兼容POSIX标准的操作系统编写的应用程序,可以在任何其他兼容POSIX标准的操作系统上编译执行而无需修改代码。常见的Linux与UNIX系统都支持POSIX标准。

  • 2、虚拟文件系统VFS

Linux系统的一个成功的关键因素是它具有与其他操作系统共存的能力。Linux的文件系统由两层结构搭建:上面的虚拟文件系统VFS(Virtual File System),和下面的各种不同的具体文件系统(例如Ext、FAT32、NFS等)
虚拟文件系统
VFS将各种具体的文件系统的公共部分抽取出来形成一个抽象层,位于用户的程序与具体需要使用的系统中间,并提供系统调用接口。这样我们只需针对VFS提供的系统调用进行文件操作而无需具体考虑底层细节。VFS屏蔽了用户对底层细节的描述使得编程简化。
可以使用指令
cat /proc/filesystems
查看当前操作系统支持哪些具体文件系统。

  • 3、文件与文件描述符

Linux操作系统是基于文件概念搭建起来的操作系统(“万物皆文件”),基于这一点,所有的I/O设备都可以直接当做文件来处理。因此操作普通文件的操作函数与操作设备文件的操作函数是相同的,这样大大简化了系统对不同设备、不同文件的处理,提高了效率。
那么对于内核而言,内核是如何区分不同的文件呢?内核使用文件描述符来索引打开的文件。文件描述符是一个非负整数,每当打开一个存在的文件或创建一个新文件的时候,内核会向进程返回一个文件描述符,当对文件进行相应操作的时候,使用文件描述符作为参数传递给相应的函数。
通常一个进程启动时,都会打开三个流:标准输入、标准输出、标准错误输出,这三个流的文件描述符分别是0、1、2,对应的宏定义是STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO。可以查看头文件unistd.h查看相关定义。
流的名称 文件描述符 宏定义
标准输入 0 STDIN_FILENO
标准输出 1 STDOUT_FILENO
标准错误输出 2 STDERR_FILENO
基于文件描述符的I/O操作虽然不能直接移植到诸如Windows系统等之外的操作系统上,但对于某些底层的I/O操作(例如驱动程序、网络连接等)是唯一的操作途径。

原创粉丝点击