组织为一系列数据的文件称为常规文件。常规文件可以包含 ASCII 文本、以其他二进制数据编码的文本、可执行代码,或者文本、数据以及代码的任意组合。
常规文件由以下部分构成:
称为 inode 的控制数据。此数据包括文件类型、访问权限、属主、文件大小以及数据块的位置。
文件内容:非结束符号的字节序列。
Solaris 操作系统提供以下基本的文件输入/输出接口形式:
基本文件 I/O中介绍的传统、原始的文件 I/O 风格。
标准 I/O 缓冲为没有虚拟内存的系统上运行的应用程序提供了更简便的接口以及更高的效率。在虚拟内存环境中(例如在 SunOS 操作系统上)运行的应用程序中,标准文件 I/O 已过时。
内存管理接口中介绍内存映射接口。对于在 SunOS 平台运行的大多数应用程序而言,映射文件是最有效的文件 I/O 形式。
接口名称 |
目的 |
---|---|
打开文件进行读取或写入 |
|
关闭文件描述符 |
|
从文件中读取 |
|
向文件中写入 |
|
创建新文件或重写现有文件 |
|
删除目录项 |
|
移动读/写文件指针 |
以下代码样例说明了基本文件 I/O 接口用法。read(2) 和 write(2) 都从文件当前偏移位置开始传送不超过指定数量的字节。返回实际传送的字节数。read(2) 返回零时指示已到达文件结尾。
#include <fcntl.h> #define MAXSIZE 256 main() { int fd; ssize_t n; char array[MAXSIZE]; fd = open ("/etc/motd", O_RDONLY); if (fd == -1) { perror ("open"); exit (1); } while ((n = read (fd, array, MAXSIZE)) > 0) if (write (1, array, n) != n) perror ("write"); if (n == -1) perror ("read"); close (fd); }
完成读取或写入文件后,应始终调用 close(2)。不要针对不是从调用 open(2) 返回的文件描述符调用 close(2)。
使用 read(2)、write(2),或者调用 lseek(2) 可以改变已打开文件的文件指针偏移。以下示例说明了 lseek 的用法。
off_t start, n; struct record rec; /* record current offset in start */ start = lseek (fd, 0L, SEEK_CUR); /* go back to start */ n = lseek (fd, -start, SEEK_SET); read (fd, &rec, sizeof (rec)); /* rewrite previous record */ n = lseek (fd, -sizeof (rec), SEEK_CUR); write (fd, (char *&rec, sizeof (rec));
接口名称 |
目的 |
---|---|
链接到文件 |
|
确定文件的可访问性 |
|
生成特殊文件或普通文件 |
|
更改文件的模式 |
|
更改文件的属主和组 |
|
设置文件的访问时间和修改时间 |
|
获取文件状态 |
|
执行文件控制功能 |
|
控制设备 |
|
获取可配置的路径名变量 |
|
执行目录操作 |
|
生成目录 |
|
读取符号链接的值 |
|
更改文件的名称 |
|
删除目录 |
|
生成到文件的符号链接 |
接口名称 |
目的 |
---|---|
获取文件系统统计信息 |
|
更新超块 |
|
挂载文件系统 |
|
获取文件系统信息 |
|
获取文件系统类型信息 |