1.6.2 用于文件管理的系统调用

许多系统调用与文件系统有关。本小节讨论在单个文件上的操作,1.6.3节将讨论与目录和整个文件系统有关的内容。

要读写一个文件,先要使用open打开该文件。这个系统调用通过绝对路径名或指向工作目录的相对路径名指定要打开文件的名称,而代码O_RDONLY、O_WRONLY或O_RDWR的含义分别是读、写或两者。为了创建一个新文件,使用O_CREAT参数。然后可使用返回的文件描述符进行读写操作。接着,可以用close关闭文件,这个调用使得该文件描述符在后续的open中被再次使用。

毫无疑问,最常用的调用是read和write。我们在前面已经讨论过read。write具有与read相同的参数。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

尽管多数程序频繁地读写文件,但是仍有一些应用程序需要能够随机访问一个文件的任意部分。与每个文件相关的是一个指向文件当前位置的指针。在顺序读(写)时,该指针通常指向要读出(写入)的下一个字节。lseek调用可以改变该位置指针的值,这样后续的read或write调用就可以在文件的任何地方开始。

lseek有三个参数:第一个是文件的描述符,第二个是文件位置,第三个说明该文件位置是相对于文件起始位置、当前位置,还是文件的结尾。在修改了指针之后,lseek所返回的值是文件中的绝对位置。

UNIX为每个文件保存了该文件的类型(普通文件、特殊文件、目录等),大小,最后修改时间以及其他信息。程序可以通过stat系统调用查看这些信息。第一个参数指定了要被检查的文件;第二个参数是一个指针,该指针指向用来存放这些信息的结构。对于一个打开的文件而言,fstat调用完成同样的工作。