/*申明:本学习日记是参照《UNIX环境高级编程》而写 *。
由于第一章和第二章主要讲解UNIX(LINUX)系统的一些基础知识和一些技术标准之间的差异,所以在这里我就不再浪费时间和精力了。如果有兴趣可以自己看看。
本章主要讲解LINUX系统中的无缓冲文件(unbuffered)I/O操作的相关函数和用法。最后为了大家能够灵活的掌握这些函数的用法,并给出了少量的上机练习题。
首先,我们从整体了解一下文件操作的大致流程:打开(open)或创建(create)文件-->读(read)、写(write)、重新(lseek)定位文件-->关闭文件(close)。那么在无缓冲文件(unbuffered)I/O操作中,我们用什么来标志我们打开的文件------文件描述符(file descriptor)。
1。文件描述符(file descriptor)
文件描述符是系统内核分配给打开的文件的最小非负整数。当我们打开(open)一个现存文件或创建(create)一个新文件时,内核向进程返回一个文件描述符。然后将其作为参数传送给r e a d、w r i t e、lseek等这些需要对该文件进行操作的函数。
文件描述符的范围在<unistd.h>头文件中通过OPEN_MAX来限制,新的LINUX系统中,其值一般为63,即一个进程最多能同时打开64个文件。同时在该文件中还定义了STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO三个常数,其值分别为0、1、2;它们分别代表标准输入设备(一般为键盘)、标准输出设备(一般为显示器)和标准错误输出设备(一般也为显示器)。
2。文件操作的函数
1>.打开文件函数
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char pathname, int oflag ,....../* mode_t mode */)
返回:若成功为int型的文件描述符,若出错为- 1
pathname :你要打开文件所在的目录(包括文件名)。
oflag :指定打开文件的方式的参数,可以通过单个以下的值或它们的“或”组合。最主要有三个:只读(O_RDONLY)、只写(O_WRONLY)、读写(O_RDWR);另外还有一些其他的控制参数如O_APPEND、O_CREAT等等,这些参数的具体含义和用法可以在LINUX中通过man open来获得。它们都是定义在头文件<fcntl.h>中。
mode :是一个可选的参数,只有当oflag中有O_CREAT时,这个参数才会出现在open函数中,它主要用来指定创建一个新文件时的权限。