栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言标准io,例如:fread(),fwrite(),fgetc()等 (完)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言标准io,例如:fread(),fwrite(),fgetc()等 (完)

好的,同学们,我们书接上回,继续讲我们的C语言标准io,这一次,我会全部讲完,不会再像上一篇一样偷懒了,请同学们拿出小本本,做好笔记。以下函数都在头文件stdio.h中

一. 打开,关闭文件流

1)open()

函数原型:

 FILE *fopen(const char *path, const char *mode);

功能:

打开一个文件流。

参数:

        path:要打开的文件名

        mode:打开文件的标志。
                r     只读打开,文件不存在,就会报错, 文件存在,打开后,光标在文件开头
                r+    读写打开,文件不存在,就会报错,文件存在,打开后,光标在文件开头
                w    只写打开,文件不存在,就会报错,文件存在,打开后,文件内容就会截短
                w+    读写打开,文件不存在,就会创建, 文件存在,打开后,文件内容就会截短
                a     追加打开,文件不存在,就会创建,文件存在,打开后,光标在文件末尾
                a+     追加打开,文件不存在,就会创建, 文件存在,打开后,原始读的位置的开头。                             原始写的位置的末尾。

返回值:
            成功返回文件指针 FILE * 。失败返回NULL,同时errno被设置。错误信息可用perror打印

2)close()

函数原型:

int fclose(FILE *fp);

功能:

关闭一个文件流。

参数:    
                fp:要关闭的能够文件的FILE * 
返回值:
                成功返回0,失败返回-1,同时errno会被设置。

二. 读写文件流

1.一个字符的读写

1.1) fgetc()

函数原型:

int fgetc(FILE *stream);

功能:从stream指定的文件流中读取一个字符

参数: 
            stream:指定你要读取的文件流

返回值: 
            成功返回读取到的这个字符的ascii码值,失败返回-1,同时errno被设置

1.2)getc()

函数原型:

int getc(FILE *stream);

功能:从stream指定的文件流中读取一个字符

参数: 
            stream:指定你要读取的文件流

返回值: 
            成功返回读取到的这个字符的ascii码值,失败返回-1,同时errno被设置。

看到这里,有同学们就要问了,这两个功能参数一模一样,干撒子要写两个?其实他们实现过成不一样。注意:fgetc是通过函数实现的,getc是通过宏定义实现。

1.3)getchar(void)

功能:从标准的输入流stdin中读取一个字符。

返回值:读取到的这个字符的ascii码值返回。

注:fgets(stdin) <==> getchar()

1.4) fputc()

函数原型:

int fputc(int c, FILE *stream);
功能:往stream指定的文件流中写入一个字符

参数:
            c:要写入的那个字符
            stream:指定你要写入的文件流

返回值: 
            成功返回写入到的这个字符的ascii码值, 失败返回-1,同时errno被设置.


 1.5)putc()   

函数原型 :

int putc(int c, FILE *stream);

fputc的功能,参数是一样的
 区别:
                fputc:是用函数实现的
                putc:是用宏实现的

1.6)putchar()

函数原型:

 int putchar(int c);
功能:

        往标准的输出流stdout写入c指定的字符
            
注:putchar(c)  <==>  fputc(c, stdout)

2.一行字符的读写

2.1)fgets()

函数原型:

char *fgets(char *s, int size, FILE *stream);

功能:从stream指定的文件流中读取字符

参数: 
            s:指向一块用来保存获取到的数据的空间
            size:表示最多获取多少个字节数,size为s的空间的长度
            stream:指定要读取的文件流
返回值:
            成功返回s的首地址,失败返回NULL。

2.2)gets()

函数原型:

char *gets(char *s);

功能:从标准的输入流stdin中读取字符串

参数: 
            s:指向一块用来保存获取到的数据的空间。
        返回值:
            成功返回s的首地址,失败返回NULL。

注: gets没有考虑s指向空间的大小,存在越界的风险。

2.3)fputs()

函数原型:

int fputs(const char *s, FILE *stream);

功能:往stream指定的文件流中写入s指定的数据

参数: 
            stream:指定你要写入的文件流
            s:指向一块空间,用来保存需要写入的数据

返回值:
            成功返回一个非负数,失败返回-1。

2.4)puts()

函数原型:

int puts(const char *s);

功能:往标准的输出流stdout中写入s指定的数据,会换行。

参数: 
            s:指向一块空间,用来保存需要写入的数据

返回值: 
            成功返回一个非负数,失败返回-1。

三.直接写入和读取

3.1)fread()

函数原型:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

功能:从stream指定的文件流中读取nmemb个对象,且每一个对象的大小为size个字节 

参数: 
                ptr:指向一块空间,用来保存读到的数据 (“数组”)
                szie:每一个元素的大小
                nmemb:元素的个数
                stream:指定你要读取的文件流

 返回值:
                成功返回你实际读到的元素的个数。失败返回-1

栗子:

int main()
{
	//打开文件
	FILE * fp = fopen("./1.txt", "r");
	if(fp == NULL)
	{
		perror("fopen 1.txt error : ");
		return -1;
	}
				
	//读取数据
	char buf[32]={0};
	int re = fread(buf, 8, 3, fp);
				
	printf("re = %d,  buf = %sn",re, buf);
				
	//关闭文件
	fclose(fp);
}

3.2)fwrite()

函数原型:

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

功能:从stream指定的文件流中写入nmemb个对象, 且每一个对象的大小为size个字节

参数: 
                ptr:指向一块空间,用来保存要写入的数据 (“数组”)
                szie:每一个元素的大小
                nmemb:元素的个数
                stream:指定你要写入的文件流

返回值:
                成功返回你实际写入的元素的个数 ,失败返回-1。

四.其他io函数

4.1)fflush()

函数原型:

int fflush(FILE *stream);

功能:同步stream指定的流

参数:
                stream:指定你要同步的文件流

返回值:
                成功返回0,失败返回-1。

对于输出流,fflush把写缓冲区的内容写、更新到文件中 (stdout);对于输入流,fflush把读缓冲区的内容直接清空。stream指定为NULL,fflush把进程中所有打开的输出流同步。

栗子:

int main()
{
	printf("hello");
				
	fflush(NULL);
	while(1);
}
//大家可以把fflush那行删掉再试试,看看结果有什么不同

4.2)fseek()

函数原型:

int fseek(FILE *stream, long offset, int whence);

功能:重置文件流的光标的位置

参数: 
                stream:指定你要重置光标的文件流
                offset:偏移量
                whence:基准方式
                        SEEK_SET :文件开头
                                新光标的位置 = 文件开头 + offset( >=0 )
                        SEEK_CUR :当前位置
                                新光标的位置 = 当前位置 + offset( 可正可负 )
                        SEEK_END :文件末尾
                                新光标的位置 = 文件末尾 + offset( 可正可负 )

返回值: 
                成功返回0,失败返回-1,同时errno被设置

4.3)feof()

函数原型:

int feof(FILE *stream);

功能:用来判断stream文件流是否结束

参数: 
                stream:指定你要判断的文件流

返回值:
                返回真(非0),文件到达末尾
                返回假(0),文件没有到末尾
注:标准IO库,在读到文件末尾时,会自动往缓冲区中填入一个EOF。

格老子的,终于写完了,奈斯你个奈斯,请同学们做好笔记,评论区检查笔记哦!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/352464.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号