本篇主要是针对Linux中的文件、目录以及相关操作。主要介绍系统调用和标准I/O库。linux中,一切都是以文件的形式来表示的,包括一些硬件设备。大多数情况下,只需要使用五个基本的函数--open close read write 和ioctl。目录也是文件,它用来保存其他文件的节点号(inode)和名字。正常情况下,所有用户都必须用上层opendir/readdir接口来读取目录。文件的一些属性信息都被保存在文件的inode数据结构中,它还包含文件的长度和文件在磁盘上的存放位置。下面主要介绍下inode节点的一些信息。
linux中比较重要的设备文件有三个--/dev/console /dev/tty /dev/null 第一个是表示系统控制台,过去会有一个指定的终端或者显示器来接收控制台消息,现在通常是虚拟控制台,比如在X视窗系统中,它是屏幕上的一个特殊的控制台窗口,就是我们说的终端。/dev/tty。如果一个进程有控制终端的话,那么特殊文件/dev/tty就是这个控制终端(键盘或者显示屏,或者键盘和窗口)的别名(逻辑设备)。
注意:虽然/dev/console设备只有一个,但是通过/dev/tty却能够访问许多不同的物理设备。
/dev/null是空设备,所有写向这个设备的输出都将被丢失。
我们用很少量的函数就可以对文件和设备进行访问和控制,这些函数被称为系统调用。操作系统的核心,即内核,是一组设备驱动程序。为了向用户提供一个统一的接口,设备驱动程序封装了所有与硬件相关的特性。硬件的特有功能可通过ioctl调用来完成。用来访问设备驱动程序的底层函数(系统调用)包括:
open:打开文件或设备。
read:从打开的文件或设备里读取数据
write:向文件或设备写入数据
close:关闭文件或设备
ioctl:把控制信息传递给设备驱动程序
下面分别介绍以下这五个系统调用函数。
1.open系统调用。创建新的文件描述符需要使用系统调用open。
4.close系统调用。终止一个文件描述符fildes与其对应文件之间的关联。文件描述符被释放并能够重新使用。
调用成功返回0 ,出错返回-1.
5.ioctl系统调用。它提供一个用于控制设备及其描述符行为和配置底层服务的接口。
ioctl对描述符fildes指定的对象执行cmd参数中给出的操作。