分类: LINUX
2008-11-19 15:02:27
本章主要内容:
❑ 文件和设备
❑ 系统调用
❑ 库函数
❑ 低级文件访问
❑ 管理文件
❑ 标准 I/O库
❑ 格式化输入输出
❑ 文件和目录维护
❑ 检查目录
❑ 错误
❑ /proc 文件系统
❑ 高级主题: fcntl and mmap
Linux基本上把一切都看做文件,为操作系统服务和设备提供了简单统一的接口。文件的基本功能有open, close, read, write, and ioctl.
目录也是文件,但它是一种特殊类型的文件。在现代的UNIX(包括Linux)版本中,即使是超级用户可能也不再被允许直接对目录进行写操作。正常情况下,
所有用户都必须用上层的opendir/readdir接口来读取目录,而无需了解特定系统中目录实现的具体细节。
* 目录
文件名及其属性,如创建修改日期权限等。属性存储在inode中,inode是个特殊的数据块,其中还包含了文件长度和存储地点。系统使用的是文件的inode编号,目录结构仅仅是出于方便人们使用的目的而给文件命名。
目录包含inode号和其他文件名。使用ls –i可以查看到inode。使用ln可以创建连接。删除文件的时候,文件的目录项被移除,文件的连接数目减1。当连接数目为1时,inode和对应的数据块被标识为空闲。
标准库函数不认识~.
关于Linux文件系统布局的更多信息请参考Linux文件系统标准(Linux File System Standard),读者也可以通过man hier命令来获得关于目录结构的描述。
* 文件和设备
UNIX和Linux中比较重要的设备文件有三个——/dev/console、/dev/tty和/dev/null。
1./dev/console
这个设备代表的是系统控制台。错误信息和诊断信息通常会被发送到这个设备。每个UNIX系统都会有一个指定的终端或显示屏用来接收控制台消息。过去,它可能是一台专用的打印终端。在现代的工作站和Linux上,它通常是“活跃”的虚拟控制台;而在X窗口系统中,它会是屏幕上一个特殊的控制台窗口。
2./dev/tty
如果一个进程有控制终端的话,那么特殊文件/dev/tty就是这个控制终端(键盘和显示屏,或键盘和窗口)的别名(逻辑设备)。例如,通过cron运行的进程就没有控制终端,所以它们不能打开/dev/tty。
在能够使用该设备文件的情况下,/dev/tty允许程序直接向用户输出信息,而不管用户具体使用的是哪种类型的伪终端或硬件终端。在标准输出被重定向时,这一功能非常有用。命令ls –R | more就是一个这样的例子,more程序需要提示用户进行键盘操作之后才能显示下一页内容。我们将在第5章中看到更多使用/dev/tty的例子。
注意,虽然/dev/console设备只有一个,但通过/dev/tty却能够访问许多不同的物理设备。
3./dev/null
这是空(null)设备。所有写向这个设备的输出都将被丢弃。而读这个设备会立刻返回一个文件尾标志,所以在cp命令里可以把它用做拷贝空文件的源文件。人们常把不需要的输出重定向到/dev/null。
可以在/dev目录中找到的其他设备包括,硬盘和软盘、通信端口、磁带驱动器、CD-ROM、声卡以及一些代表系统内部工作状态的设备。甚至还有/dev/zero设备,它的作用是作为内容是null字节的源文件来创建零长度文件。访问其中的某些设备需要具有超级用户权限,普通用户不能通过编写程序来直接访问如硬盘这样的底层设备。设备文件的名字会随系统的不同而不同。通常,Linux发行版都提供了以超级用户身份运行的应用程序,用来管理那些以其他用户身份无法访问的设备,例如,用于挂载文件系统的mount命令。
设备可分为字符设备和块设备。两者区别在于访问设备时是否需要一次读写一整块。一般情况下,块设备是那些支持随机文件系统存取的设备,例如硬盘。
在本章中,我们将集中讨论磁盘文件和目录。我们将在第5章中讨论另一种设备——用户终端。