open()、read()、write()、lseek()和close()。这5个函数的特点是不带缓存,直接对文件(包括设备)进行读写操作。这些函数虽然不是ANSI C 的组成部分,但是是POSIX的组成部分。
基本文件操作
1. 函数说明
open() 函数用于打开或创建文件,在打开或创建文件是可以指定文件的属性及用户的权限等各种参数。
close() 函数用于关闭一个被打开的文件。当一个进程终止时,所有被它打开的文件都由内核自动关闭,很多程序都使用这一功能而不显示地关闭一个文件。
read() 函数用于将从指定的文件描述符中读取的数据放到缓存区中,并返回实际读入的字节数。若返回0,则表示没有数据可读,即已达到文件尾。读操作从当前指针位置开始。当从终端设备文件中读出数据时,通常一次最多读一行。
write() 函数用于向打开的文件写数据,写操作从文件的当前指针位置开始。对磁盘文件进行写操作,若磁盘文件已满或超出该文件的长度,则write()函数返回失败。
lseek() 函数用于在指定的文件描述符中将指针定位到响应的位置。它只能用在可定位(可随机访问)的文件中。管道、套接字和大部分的字符设备文件是不可定位的,所以在这些文件的操作中无法使用lseek()调用。
2. 函数格式
open()函数
int open(const char *pathname, int flags, mode_t mode);
所需头文件
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>
参数:
pathname:被打开的文件名(可包含路径名)。
flags:文件打开的方式。
O_RDONLY:以只读方式打开文件。
O_WRONLY: 以只写方式打开文件。
O_RDWR:以读写方式打开文件。
O_CREAT:如果该文件不存在,就创建一个新的文件,并用第三个参数为其设置权限。
O_EXECL:如果使用O_CREAT时文件存在,则可返回错误消息。这一参数可测试文件是否存在。此时open是原子操作,防止多个进程同时创建同一个文件。
O_NOCTTY:使用本参数是,如果文件为终端,那么该终端不会成为调用open()的那个进程的控制终端。
O_TRUNC:若文件已经存在,那么会删除文件中的全部原有数据,并且设置文件大小为0。
O_APPEND:以添加方式打开文件,在打开文件的同时,文件指针指向文件尾,即将写入的数据添加到文件尾。
mode:被打开文件的存取权限。
被打开文件的存取权限 可以用一组宏定义:S_I(R/W/X)(USR/GRP/OTH) 其中 R/W/X 分别表示 读/写/执行 权限 USR/GRP/OTH 分别表示 文件所有者/文件所属组/其他用户 例如,S_IRUSR|S_IWUSR 表示设置文件所有者的可读可写属性。八进制表示法中600也表示同样的权限。
返回值:
成功:返回文件描述符。
失败:-1。