文件I/O(非缓冲区文件操作)
一、接口
- (posix接口文件操作)
系统调用接口
Linux下一切皆文件
中间没有经过缓冲区
实时性高
非常安全和快
二、打开关闭
open
-
原型:
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int creat(const char *pathname, mode_t mode);
2.头文件:
(man 2 open)
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> -
参数
pathname : 要打开文件的路径(相对路径、绝对路径)
flag:(动作标志)- O_RDONLY 读
- O_WRONLY 写
- O_RDWR 读写
- O_CREAT 没有就创建 有就访问
- O_EXCL 和O_CREAT连用如果有返回错误
- O_TRUNC 将文件截取为0
- O_APPEND 追加的方式打开
-
mode(权限):当第二个参数有O_CREAT,表示创建文件的时候给定文件的权限
-
返回值:
成功:
返回:文件描述符
失败: -1
close
5. 原型:void close(int fd);
6. 功能:关闭一个打开的文件
7. 头文件:#include <unistd.h>
三、读写操作
read
- 原型:ssize_t read(int fd, void *buf, size_t count);
- 头文件:#include <unistd.h>
- 功能:读文件内容到buf
- 参数:
fd:要读文件的路径(相对路径、绝对路径)
buf要读入的缓冲区, 提前申请好的
count要读入的字节数
5.返回值:
成功:
返回:实际读写的字节数
失败: -1
四、指针定位(lseek)
- 原型:off_t lseek(int fd, off_t offset, int whence);
- 功能:调整或得到文件当前读写的位置
- 头文件:
#include <unistd.h>
#include <sys/types.h> - 参数:
fp 用open打开的文件描述符
offset:想要调整的文件读写位置的相对偏移 负数向左移动 正数向右移动
whence:
调整文件读写位置的基准。
SEEK_SET:当前位置为文件的开头
SEEK_CUR:当前位置为文件指针的位置
SEEK_END:当前位置为文件的结尾