1. 要点
1. FILE结构体,也称为流,是fopen打开的返回值。
2. 缓冲,标准IO实现用户态增加缓冲区。
3. 文本流、二进制流
4. EOF 是什么意思。
5. fgetc函数返回值为什么是int?
2. 标准IO api (是依据对应的无缓冲io函数实现的,也就是POSIX IO)
fopen(),fclose(),fgetc(),fputc(),fgets(),fputs(),fread(),fwrite()
------------------------------------------------------------------------------------------------------------
3.1 fopen() 函数原型
FILE *fopen(const char *path, const char *mode);
3.2 返回值
打开成功则返回FILE 类型指针,失败则返回空指针,并写入errno值。
3.3 参数
*path 指文件指向字符类型的指针
*mode 打开模式,打开文件的权限,指向字符类型的指针
3.4 头文件
#include <stdio.h>
3.5 示例
void test02_01(){
FILE *f = NULL;
f = fopen("testfiles/test02_01.txt","r");
if(f!=NULL) printf("打开文件成功,指针为:%p\n",f);
if(f==NULL){
printf("打开文件失败\n");
printf("errno:%d\t%s\n",errno,strerror(errno));
}
}
4.1 fclose()
功能:关闭打开的文件指针,并且刷新缓存。
函数原型:int fclose(FILE *fp);
参数:FILE *fp 打开的文件指针。
返回值:成功返回0,如果不成功返回(-1);
4.2 示例
/* fclose()函数 */
int fclose_ret = fclose(f);
if(fclose_ret==0) printf("文件f %p,关闭成功\n",f);
if(fclose_ret==-1){
printf("文件关闭失败\n");
printf("errno:%d\t%s\n",errno,strerror(errno));
}
5.1 fgetc()函数
功能:从流中读入下一个字符
函数原型: int fgetc(FILE *stream);
参数:FILE *stream 打开的文件流的指针。
返回值:成功返回读取到的字符,读到文件结尾时返回EOF。
5.2 示例
/* fgetc()函数 */
int c = fgetc(f);
if (c==EOF) printf("读入错误\n");
printf("读入字符的ascii值为:%d\n",c);
printf("读入的字符为:%c\n",c);
6.1 fputc()函数
功能: 函数fputc()把给出的字符写到给出的输出流.
函数原型 : int fputc(int c, FILE *stream);
参数:int类型(ascii值) 输出流的指针
返回值:如写入成功则返回写入的字符, 否则返回一个EOF
6.2 示例
/* fputc()函数 */
fseek(f,0,SEEK_END);//设置指针定向到文件尾部
int c_ret = fputc(101,f);
// int c_ret = fputc('c',f);//参考也可用字符型,应该是默认执行了强制转换
if(c_ret==EOF) printf("输入失败\n");
printf("输入字符的ascii值为:%d\n",c_ret);
printf("输入的字符为:%c\n",c_ret);
参考: Linux环境编程--01