文档详情

第九章嵌入式.pdf

发布:2017-09-26约2.73万字共24页下载文档
文本预览下载声明
第9 章 Linux系统编程之文件 9.1 文件的分类 在 LINUX 中,文件被用来实现统一的设备接口。除了把磁盘数据组织成文件系统之外, LINUX 还把其他外部设备(如 CD-ROM、显示器、键盘、打印机、鼠标和网络接口等)也 映射成为一个文件。这种统一接口的 LINUX 设计哲学,既方便了用户(用户只需像访问磁 盘文件一样去访问各种设备即可),又成就了 LINUX 系统(系统内核简洁、安全、易移植、 易扩展)。 根据文件所映射的具体设备,一般把 LINUX 文件分为三类:普通文件、块文件和字符 文件。普通文件指磁盘上的数据文件;块文件表示特性与磁盘类似的设备,这种设备允许以 块或组块的形式传送信息,并具有从设备的任何地方检索块的能力;字符文件表示特性与终 端类似的设备,这种设备允许以字节为单位传送信息,并且只能顺序操作。另外,在 LINUX 中,目录也以文件的形式存在,称为目录文件。LINUX 还提供了一种链接文件用于文件的 访问。因此,当用 ls –l 命令查看时,文件共有 5 种类型:普通文件(- )、目录文件(d )、 链接文件(l )、字符文件(c )和块文件(b )。 对所有类型的文件,POSIX 主要提供了 5 个系统调用来访问:open、close、read 、write 、 ioctl,这些函数通过调用被称为设备驱动程序的操作系统模块来完成对具体设备的操作。 同样的,ANSI C 的标准库函数中也提供了对文件的访问函数,它们主要包括 fopen、 fclose、fscanf、fprintf、fread、fwrite 等。 从本质上来看,标准库函数是对系统调用的一个包装,在进行 LINUX 系统编程时,既 可以调用标准库函数,也可以调用系统调用,但二者的使用还是有一定区别的。 9.2 用于文件操作的系统调用 9.2.1 打开和关闭文件 open 系统调用将一个整数值与一个文件或物理设备关联起来,这个整数值被称为文件 描述符。如果成功,open 返回一个非负整数来表示打开的文件描述符。如果不成功,open 返回-1 并设置 errno,具体 errno 值请查阅联机帮助手册。 1 文件描述符表示了打开的文件或设备,可以将文件描述符想象成进程文件描述符表的索 引,文件描述符表在进程的用户区,提供了对相关文件或设备的系统信息的访问。每个进程 都自动伴随三个打开的文件,它们的文件描述符分别为 STDIN_FILENO、STDOUT_FILENO 和 STDERR_FILENO,其值分别为 0、1 和 2 ,分别表示标准输入、标准输出和标准错误, 缺省情况下分别代表键盘和显示器。 SYNOPSIS #include fcntl.h #include sys/types.h #include sys/stat.h int open(const char *path, int oflags); int open(const char *path, int oflags, mode_t mode); POSIX 参数 path 指向要打开的文件或设备的路径名。 参数 oflag 为打开的文件指定了状态标志符和访问模式,该参数通过访问模式标识符和 附加标志符按位或(| )运算来构建。访问模式标识符的 POSIX 值为 O_RDONLY 、 O_WRONLY 、O_RDWR ,必须指定其中一个来说明只读、只写或读写。附加标志符包括 O_APPEND、O_CREAT、O_EXECL、O_NOCTTY、O_NONBLACK 和 O_TRUNC 。其中 O_APPEND 在写操作之前使文件偏移转移到文件的末端,这样就可以向一个已存在的文件 添加内容了,与之相反 O_TRUNC 将为写操作打开的正常文件的长度删减为 0 。O_NOCTTY 防止一个已打开的设备变成一个终端。O_NONBLOCK 负责控制 open 是立即返回还是一直 阻塞到设备准备好为止。O_CREAT 创建一个新文件(必须向 open 传递第三个参数 mode ), 如果想避免重写一个已存在的文
显示全部
相似文档