加入CSDN是出于记录,希望有不足之处多加指正。
1、文件IO
系统IO:
- 由系统直接提供函数接口,特点是接口简洁而功能单一。
- 没有提供缓冲区,对于处理海量数据效率低下。
- 有个别的文件/操作只能通过系统IO来访问。
标准io:
- 由标准C库所提供的接口,特点功能比较丰富。
- 有提供缓冲区,多余处理量数据来说效率比较高。
- 编程过程中尽量多使用标准IO,只有在某些不得已的情况下才选择系统IO。
系统IO的API接口:
- 确保文件存在:access();
- 打开文件:open();
- 写入信息:write();
- 关闭文件:close();
open (打开文件)
头文件:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
定义函数:
int open(const char * pathname, int flags);
int open(const char * pathname, int flags,mode_t mode);
参数分析:
pathname --> 路径+名字
flags -->所能使用的旗标
O_RDWR 以可读写方式打开文件,利用 OR (|) 运算符组合。
O_CREAT 若欲打开的文件不存在则自动建立该文件。
......
mode --> 只要在文件需要创建的时候生效,其余的情况无效
用来表示文件创建时的初始权限值
0654 --> 0 八进制
6 拥有者可读+可写
5 同组用户可读+可执行
4 其他用户可读
或者使用:
S_IRUST|S_IWUSR|S_IRGRP|S_IXGRP|S_IROTH
返回值:
成功 :返回一个文件描述符(new file descriptor)
int --> 整型-->数字-->编号-->文件
失败 : 返回-1,错误号码会被设置
注意:
- 文件描述符仅用于当前进程。
- open 的返回值必须得接收,不然的话无法访问文件。
错误号码:
perror( 打印出错误原因信息字符串)
头文件:
#include <stdio.h>
定义函数:
void perror(const char *s);
参数分析:
s --> 错误提示信息+自动接上错误原因
返回值:
无
strerror (返回错误原因的描述字符串)
头文件:
#include <string.h>
定义函数:
char * strerror (int errnum);
参数分析:
errnum -->错误号码,系统定义的宏 errno
返回值:
返回描述错误原因的字符串指针
注意:
strerror 需要多包含一个错误号码的头文件 <errno.h>
实例代码:
int main (int argc , char const *argv[])
{
char *FileName = "./123.txt";
int fd_test = open (FileName, O_WRONLY | O_CREAT, 0666);
if(-1 == fd_test)
{
printf("不能打开文件:%s,原因是%d\n", FileName, strerror (errno));
return -1; // 返回值 -1 ,不然会报错
}
else
{
printf("可以打开文件:%s ,描述符%d\n" ,FileName , fd_test);
}
return 0;
}
write (将数据写入已打开的文件内)
头文件:
#include <unistd.h>
size_t write (int fd, const void *buf , size_t count);
参数分析:
fd --> 需要写入的文件的描述符
buf --> 需要写入数据的首地址
count --> 需要写入的字节数
返回值:
返回实际写入的字节数。
当有错误发生时则返回-1,错误代码存入 errno 中
close (关闭文件)
头文件:
#include <unistd.h>
定义函数:
int clost(int fd);
参数分析:
fd --> 需要关闭的文件描述符
返回值:
若文件顺利关闭则返回 0
发生错误返回 -1