Linux操作系统-文件(1)
来源:互联网 发布:在网络上怎么赚钱 编辑:程序博客网 时间:2024/04/29 05:52
Linux操作系统—文件(1)(2015-7-21)
分类:Linux操作系统
总述:
在LINUX中,几乎任何事物都可以用一个文件来表示。Linux中的文件类型多样,既包含普通的磁盘文件,也包含特殊的硬件设备文件,管道(PIPE)文件,套接字(socket)文件和目录文件等。在C语言的编程环境中,与文件有关的操作主要是I/O(输入输出)操作。Linux环境下的I/O操作分为两类:
- 基于文件描述符的底层系统调用I/O
- 基于流的C语言标准库函数调用I/O
基于文件描述符的底层系统调用I/O
一:Linux文件I/O概述
Linux中,文件系统被组织成一树的形状,树枝是目录,树叶是文件。其中的目录也是一类特殊的文件。另外,Linux中用于进程间通信的管道和用于网络通信的socket,也都以文件接口的方式提供服务。因此,文件操作编程是其它应用编程的基础之一。
文件为操作系统服务和设备提供了一个简单而一致的接口,大多数Linux文件I/O只需要用到5个函数:open, read, write, lseek和close。除此之外,使用stat, access等其它I/O函数可以获取或设置文件的状态和权限等信息。对于目录文件的操作,Linux则提供了一些简单而特殊的编程接口。
文件和目录
- 文件的属性被保存在文件的索引节点(inode)中。
索引节点是文件系统中的一个特殊的数据块,用以保存文件自身的属性,包含了如下的信息:
- 文件使用的设备
- 索引节点号
- 文件访问权限和文件类型
- 文件的硬连接数
- 所有者的用户ID
- 组ID
- 设备文件的设备号
- 文件大小(单位为字节)
- 包含该文件的磁盘块的大小
- 该文件所占的磁盘块
- 文件的最后访问时间
- 文件的最后修改时间
- 文件状态的最后改变时间
什么是目录?Linux文件系统将文件的索引节点号和文件名同时保存在目录中。目录是用于保存其它文件的节点号和名字的文件,是将文件的名称和它的索引节点号结合在一起的一张表。目录中每一对文件名称和索引节点号称为一个“连接”。目录文件中的每个数据项都是指向某个文件节点的连接。删除一个文件时,实质上是删除目录中与该文件对应的数据项,同时将文件的连接数减1。
- 通常文件中包含一定的数据,磁盘中的普通文件和目录文件都有相应的磁盘区域存储数据。这些数据是存储在由索引节点指定的位置上的。而其他一些文件,如设备文件等,则不具有这样的磁盘存储区域。
文件和设备
硬件设备在Linux中通常也被映射为文件。这些设备文件被放在Linux的/dev目录下。硬件设备可分为字符设备和块设备,两者的区别在于是否需要一次读写一整块,比如:
- 键盘:是一种字符设备,一次仅能读取一个字节。
- 硬盘:是一种块设备,每次至少读写一个扇区
Linux环境下一类比较重要的设备是终端设备。终端是一种字符设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写。比较重要的终端设备有:
- 控制终端:代表进程的控制终端(键盘和显示屏或键盘和窗口)
- 控制台终端:代表控制台。错误信息和诊断信息通常会被发送到这个设备(打印终端,虚拟控制台,控制台窗口)
- /dev/null:代表空设备,所有写向这个设备的输出都将被丢弃,而读设备会立即返回文件尾标志。空设备通常用于输出重定向,以忽略某些错误输出。
系统调用和标准函数库
- 系统调用:UNIX/Linux内核直接提供的编程接口,在内核空间运行。
- C语言标准函数库:由一些函数构成的集合,完全运行在用户空间,其中可能使用系统调用来完成诸如访问硬件设备的底层功能。
注意:直接使用底层系统调用进行I/O操作的效率非常底下。原因如下:
1. 执行系统调用时,Linux必须从用户空间切换到内核空间,然后再切换回来。
2. 硬件会限制系统调用一次所读写的数据块大小,如块设备。
为此,应让每次系统调用完成尽可能多的工作。这正是C语言标准函数库所做的。C语言标准函数库带有缓冲机制,允许在缓冲区满或必须的情况下才使用底层的系统调用,这样减少了系统调用的次数,提供了效率。另外,有的库函数完全不用系统调用,只在用户空间完成特定的功能。
- Linux操作系统-文件(1)
- linux 文件操作系统 设计
- linux 文件操作系统调用
- Linux操作系统-文件(2)
- Linux操作系统-文件(3)
- linux操作系统文件IO
- linux 文件操作系统调用
- 解析linux操作系统文件目录
- 解析Linux操作系统文件目录
- 解析Linux操作系统文件目录
- 简述Linux操作系统文件搜索
- 解析Linux操作系统文件目录
- Linux操作系统创建锁文件
- 释放Linux操作系统文件缓存
- 解析linux操作系统文件目录
- 释放Linux操作系统文件缓存
- 解析Linux操作系统文件目录
- 释放Linux操作系统文件缓存
- BZOJ 2957 楼房重建
- 用windows live writer 不能发布CSDN博客解决方法
- 初识JAVA4(抽象类、接口、多态)
- BAT,不再是BAT
- 关于使用占位符来解决SQL注入
- Linux操作系统-文件(1)
- Linux操作系统-文件(2)
- 数组参数传递时需要注意的事项
- Linux操作系统-文件(3)
- Gas Station
- linux vi 操作命令和linux 乱码问题的解决
- 使用Windows Live Writer 常见的几个Blog接口
- Linux操作系统-进程和信号(1)
- 实现一种算法,打印n对括号的全部有效组合(即左右括号正确配对)