Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19739749
  • 博文数量: 679
  • 博客积分: 10495
  • 博客等级: 上将
  • 技术积分: 9308
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-18 10:51
文章分类

全部博文(679)

文章存档

2012年(5)

2011年(38)

2010年(86)

2009年(145)

2008年(170)

2007年(165)

2006年(89)

分类: LINUX

2008-11-19 15:02:27

本章主要内容:

文件和设备

系统调用

库函数

低级文件访问

管理文件

标准 I/O

格式化输入输出

文件和目录维护

检查目录

错误

/proc 文件系统

高级主题: fcntl and mmap

 

§3.1  Linux文件结构

       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命令来获得关于目录结构的描述。

 

     文件和设备

 

 

 

UNIXLinux中比较重要的设备文件有三个——/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章中讨论另一种设备——用户终端。

 

 

阅读(3054) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~