linux系统c读写文件函数open write read lseek用法实例
环境:ubuntu 16.04
1.头文件
#include <sys/types.h> //定义了一些常用数据类型,比如size_t
#include <fcntl.h> //定义了open、creat等函数,以及表示文件权限的宏定义
#include <unistd.h> //定义了read、write、close、lseek等函数
#include <errno.h> //与全局变量errno相关的定义
#include <sys/ioctl.h> //定义了ioctl函数
2.函数原型
int open(const char *pathname, int flags);
int open(const char *pathname, int flags,mode_t mode);
① 参数含义如下:
pathname:文件路径+文件名称
flags:文件打开方式
mode:打开文件的权限
返回值int:打开成功则返回文件描述符,打开失败则返回-1,同时设置全局变量errno的值来表示错误原因;
② flags标志的值可以使用在<fcntl.h>的宏定义:
O_RDONLY:只读
O_WRONLY:只写
O_RDWR:可读可写(常用)
O_CREAT:如果要打开的文件不存在,则创建新文件
O_EXCL:如果使用O_CREAT时文件已经存在,则返回错误消息
O_TRUNC:如果文件已经存在,且成功打开,则删除文件中原来的全部数据
O_APPEND:以追加写入方式打开文件,打开之后文件指针指向文件末尾
ssize_t read(int fd, void *buf, size_t count);
函数参数含义如下:
fd:文件描述符
buf:用来接收所读数据的缓冲区
count:请求读取的字节数
返回值:读取成功则返回读取的字节数,读取到文件尾则返回0,读取失败则返回-1,同时设置全局变量errno的值来表示错误原因;
ssize_t write(int fd, const void *buf, size_t count);
函数参数含义如下:
fd:文件描述符
buf:存放待写入数据的缓冲区
count:请求写入的字节数
返回值:写入成功则返回实际写入的字节数,写入失败则返回-1,同时设置全局变量errno的值来表示错误原因;
int close(int fd);
函数参数fd表示要关闭文件的文件描述符。
如果关闭成功,返回0,否则返回-1,同时设置全局变量 errno 报告具体错误的原因。
off_t lseek(int fildes, off_t offset, int whence);
函数说明:
每一个已打开的文件都有一个读写位置, 当打开文件时通常其读写位置是指向文件开头, 若是以附加的方式打开文件(如O_APPEND), 则读写位置会指向文件尾. 当read()或write()时, 读写位置会随之增加,lseek()便是用来控制该文件的读写位置. 参数fildes 为已打开的文件描述词, 参数offset 为根据参数whence来移动读写位置的位移数.
参数 whence 为下列其中一种:
SEEK_SET 参数offset 即为新的读写位置.
SEEK_CUR 以目前的读写位置往后增加offset 个位移量.
SEEK_END 将读写位置指向文件尾后再增加offset 个位移量. 当whence 值为SEE