概念
在posix(可移植操作系统接口)中定义的一组输入输出的函数
特点
1.没有缓冲机制,每次操作都会经过系统调用,效率较低
2.围绕文件描述符来操作,0(标准输入)、1(标准输出)、2(标准错误)、......
3.默认打开0、1、2
4.除目录外其他任意类型文件都可以操作
函数
打开文件
open
定义:
int open(const char *pathname, int flags);
功能:
打开文件
参数:
pathname:文件路径名
flags:打开文件的方式
O_RDONLY:只读
O_WRONLY:只写
O_RDWR:可读可写
O_CREAT:创建
O_TRUNC:清空
O_APPEND:追加
返回值:
成功:文件描述符
失败:-1
当打开方式为O_CREAT时,open函数需要传入第三个参数:文件的权限值,这里的权限值为八进制数,通过运算:传入的值 & (~umask),可以得出实际的权限值,umask为文件权限掩码,值为0002。
关闭文件
close
调用时直接传入文件操作符即可。
读写文件
read
定义:
ssize_t read(int fd, void *buf, size_t count);
功能:
从一个已打开的可读文件中读取数据
参数:
fd 文件描述符
buf 存放位置
count 期望的个数
返回值:
成功:实际读到的个数
返回-1:表示出错,并设置errno号
返回0:表示读到文件结尾
write
定义:
ssize_t write(int fd, const void *buf, size_t count);
功能:
向指定文件描述符中,写入 count个字节的数据。
参数:
fd:文件描述符
buf:要写的内容
count:期望值
返回值:
成功:实际写入数据的个数
失败 : -1
文件定位操作
lseek
定义:
off_t lseek(int fd, off_t offset, int whence);
功能:
设定文件的偏移位置
参数:
fd:文件描述符
offset:偏移量
正数:向文件结尾位置移动
负数:向文件开始位置
whence :相对位置
SEEK_SET:开始位置
SEEK_CUR:当前位置
SEEK_END:结尾位置
返回值:
成功:文件的当前位置
文件属性获取
stat
定义:
int stat(const char *path, struct stat *buf);
功能:
获取文件属性
参数:
path:文件路径名
buf:保存文件属性信息的结构体
返回值:
成功:0
失败:-1
struct stat
{
dev_t st_dev; /* 设备ID */
ino_t st_ino; /* inode号 */
mode_t st_mode; /* 文件类型和权限 */
nlink_t st_nlink; /* 硬链接数 */
uid_t st_uid; /* 用户ID */
gid_t st_gid; /* 组ID */
off_t st_size; /* 大小 */
time_t st_atime; /* 最后访问时间 */
time_t st_mtime; /* 最后修改时间 */
time_t st_ctime; /* 最后状态改变时间 */
};
目录操作
目录操作围绕目录流DIR *。
opendir
定义:
DIR *opendir(const char *name);
功能:
获得目录流
参数:
要打开的目录
返回值:
成功:目录流
失败:NULL
readdir
定义:
struct dirent *readdir(DIR *dirp);
功能:
读目录
参数:
要读的目录流
返回值:
成功:读到的信息
失败或读到目录结尾:NULL
返回值为结构体,该结构体成员为描述该目录下的文件信息
struct dirent
{
ino_t d_ino; /* 索引节点号*/
off_t d_off; /*在目录文件中的偏移*/
unsigned short d_reclen; /* 文件名长度*/
unsigned char d_type; /* 文件类型 */
char d_name[256]; /* 文件名 */
};
closedir
定义:
int closedir(DIR *dirp);
功能:
关闭目录
参数:
dirp:目录流