标准IO

库函数:
库函数为了实现某个功能而封装起来的API集合,提供统一的编程接口,更加便于应用程序的移植,是编程语言或者应用程序的一部分。
标准IO操作对象:FILE流指针,每个被使用的文件都在内存中开辟一个区域,用来存放文件的有关信息,这些信息是保存在一个结构体类型的变量中,该结构体类型是由系统定义的,取名为FILE。(在libio.h中定义)
标准IO特点:
(1)对系统调用做了一层封装,向上层提供统一的接口,屏蔽操作系统之间的差异,便于代码的移植
(2)对文件操作有缓存,读写的时候,数据先存放在缓存中,减少系统调用的次数,提高读写的效率
1.打开文件
FILE *fopen(const char *path, const char *mode);
参数:@path   文件路径名
@mode
"r"  只读方式    ----> O_RDONLY
"r+" 读写方式    ----> O_RDWR
"w"  只写方式,如果文件不存在,则创建,文件存则清空-->O_WRONLY | O_CREAT |O_TRUNC,0666
"w+" 读写方式,如果文件不存在,则创建,文件存则清空-->O_RDWR | O_CREAT |O_TRUNC,0666
"a"  只写方式,文件尾部开始写,如果文件不存在则创建-->O_WRONLY | O_APPEND | O_CREAT,0666
"a+" 读写方式,第一次读的时候,从文件开始读,写总是在末尾写,如果文件不存在则创建-->O_RDWR | O_APPEND | O_CREAT,0666
返回值:成功会返回文件流指针(标示的打开文件),失败返回NULL

标准输入  文件描述符:0     流指针:stdin 行缓存
标准输出  文件描述符:1     流指针:stdout         行缓存
标准出错  文件描述符:2     流指针:stderr         无缓存
缓存类型:
全缓存:当填满I/O缓存后才进行实际I/O操作(或者执行fflush、fclose、exit、return(也就是程序结束)),4K大小
行缓存:当填满I/O缓存后才进行实际I/O操作或者遇到换行符‘\n’(或者执行fflush、fclose、exit、return),1K大小
无缓存:标准错误输出strerr
2、每次读写一个字符:
int fputc(int c, FILE *stream);
功能:向一个流中写入一个字符
参数:c:写入的字符
stream:写入的流
返回值:成功返回写入的字符,失败返回EOF
int fgetc(FILE *stream);
功能:读取一个字符
参数:文件流指针
返回值:成功返回读到的字符,失败或读到文件末尾返回EOF(feof和ferror函数判断)
3、每次读写一行字符:
int fputs(const char *s, FILE *stream);
功能:写入一串字符串
参数:s:写入字符串的首地址
stream:文件流指针
返回值;成功返回非0,失败或者读到文件结尾返回EOF
这个fputs和fgets两个函数刚好相互配的,fgetd读取时自动加上‘\0’,fgets这个函数写入时并不把'\0'写入,而是去掉'\0',把'\0'之前的内容写进去
char *fgets(char *s, int size, FILE *stream);
功能:读取一行字符
参数:s:读到那里去
size:读多少(实际读size - 1个)
stream:文件流指针
返回值:成功返回保存s的首地址,失败返回NULL
返回的情况:遇'/n' '/0' EOF 以及读满size - 1个字符 就会返回
int puts(const char *s);
功能:向终端输出一串字符串,结尾自动加‘\n’
参数:输出的字符串首地址
返回值:成功返回非负,失败返回EOF
gets永远不要使用,它不会检查我们申请的buf长度;
4、直接IO(二进制IO):
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:读取一个结构
参数:ptr:存放读取到的结构的地址
size:每个结构的大小
nmemb:结构的数量
stream:文件流指针
返回值:成功返回需要读取到的结构的数目,失败返回实际读取到的结构的数目(小于nmemb值);
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
功能:写入一个结构
参数:ptr:需要写入的结构的地址
size:每个结构的大小
nmemb:结构的数量
stream:文件流指针
返回值:成功返回需要写入的结构的数目,失败返回实际写入的结构的数目(小于nmemb值);

fread和fwrite函数当size这个参数为1时,那么返回的是读取/写入的字节数
5、文件定位
int fseek(FILE *stream, long offset, int whence);
功能:操作文件的读写位置指针
参数:stream:文件流指针
offset:偏移量
whence:偏移基准
SEEK_SET:以文件开头为基准
SEEK_CUR:以文件当前位置为基准
SEEK_END:以文件末尾为基准
返回值:成功返回0,失败返回-1并且设置errno
long ftell(FILE *stream);
功能:获得文件当前的偏移量
参数:文件流指针
返回值:返回文件当前的读写指针位置
把文件读写移动到最后,再调用此函数,可以知道文件的大小
问题:如何获取文件大小?
回答:
fseek(fp,0,SEEK_END);
len = ftell(fp);
void rewind(fp) = fseek(fp,0,SEEK_SET)
直接把文件的读写指针移动到文件的开始为位置
6、创建一个目录
int mkdir(const char *pathname, mode_t mode);
功能:创建一个目录
参数:@pathname:目录的路径名
@mode:目录的权限
返回值:成功返回0,失败返回-1
7、打开一个目录
DIR *opendir(const char *name);
功能:打开一个目录
参数:@name:目录路径名
返回值:成功返回一个目录流,失败返回NULL
8、读取一个目录内容
struct dirent *readdir(DIR *dirp);
功能:读取一个目录内容
参数:@dirp:目录流
返回值:成功返回一个结构体指针,结构体内存放着目录所包含文件的信息,失败返回NULL,每次只能读取一个结构体。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值