用fread函数或fwrite函数读写的文件必须是_FCGI_fwrite

用fread函数或fwrite函数读写的文件必须是_FCGI_fwritefwrite和fread是以记录为单位的I/O函数,fread和fwrite函数一般用于二进制文件的输入输出。#includesize_tfread(void*ptr,size_tsize,size_tnmemb,FILE*stream);size_tfwrite(constvoid*ptr,size_tsize,size_tnmemb,FILE*s

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

fwrite和fread是以记录为单位的I/O函数,fread和fwrite函数一般用于二进制文件的输入输出。

#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);


返回值:读或写的记录数,成功时返回的记录数等于nmemb,出错或读到文件末尾时返回的记录
数小于nmemb,也可能返回0。

    fread和fwrite用于读写记录,这里的记录是指一串固定长度的字节,比如一个int、一个结构体或者一个定长数组。参数size指出一条记录的长度,而nmemb指出要读或写多少条记录,这些记录在ptr所指的内存空间中连续存放,共占size * nmemb个字节,fread从文件stream中读出size * nmemb个字节保存到ptr中,而fwrite把ptr中的size * nmemb个字节写到文件stream中。

    nmemb是请求读或写的记录数,fread和fwrite返回的记录数有可能小于nmemb指定的记录数。例如当前读写位置距文件末尾只有一条记录的长度,调用fread时指定nmemb为2,则返回值为1。如果当前读写位置已经在文件末尾了,或者读文件时出错了,则fread返回0。如果写文件时出错了,则fwrite的返回值小于nmemb指定的值。下面的例子由两个程序组成,一个程序把结构体保存到文件中,另一个程序和从文件中读出结构体

fread和fwrite的例子程序如下:

/* -------------------writerec.c--------------- */
#include <stdio.h>
#include <stdlib.h>
struct record {
	char name[10];
	int age;
};
int main(void)
{
	struct record array[2] = {
  
  {"Ken", 24}, {"Knuth", 28}};
	FILE *fp = fopen("recfile", "w");
	if (fp == NULL) {
		perror("Open file recfile");
		exit(1);
	}
	fwrite(array, sizeof(struct record), 2, fp);
	fclose(fp);
	return 0;
}

/* -------------------readrec.c----------------- */
#include <stdio.h>
#include <stdlib.h>
struct record {
	char name[10];
	int age;
};
int main(void)
{
	struct record array[2];
	FILE *fp = fopen("recfile", "r");
	if (fp == NULL) {
		perror("Open file recfile");
		exit(1);
	}
	fread(array, sizeof(struct record), 2, fp);
	printf("Name1: %s\tAge1: %d\n", array[0].name, array[0].age);
	printf("Name2: %s\tAge2: %d\n", array[1].name, array[1].age);
	fclose(fp);
	return 0;
}

    $ gcc writerec.c -o writerec
    $ gcc readrec.c -o readrec


发现生成的文件recfile不能直接打开。
    原因:我们把一个struct record结构体看作一条记录,由于结构体中有填充字节,每条记录占16字节,
把两条记录写到文件中共占32字节。该程序生成的recfile文件是二进制文件而非文本文件,因为其
中不仅保存着字符型数据,还保存着整型数据24和28(在od命令的输出中以八进制显示为030和034)。
注意,直接在文件中读写结构体的程序是不可移植的,如果在一种平台上编译运行writebin.c程序,
把生成的recfile文件拷到另一种平台并在该平台上编译运行readbin.c程序,则不能保证正确读出
文件的内容,因为不同平台的大小端可能不同(因而对整型数据的存储方式不同),结构体的填充方式
也可能不同(因而同一个结构体所占的字节数可能不同,age成员在name成员之后的什么位置也可能不同)。
通过readrec程序读取文件recfile的内容,说明writerec程序的确记录成功写入recfile中。
    从recfile读出的内容如下:

    Name1: Ken    Age1: 24
    Name2: Knuth  Age2: 28
fwrite和fread的应用举例:
1.将一个字符串写入文件:

char *str="hello,I am a test program!";
fwrite(str,sizeof(char),strlen(str),fp)


2.将一个字符数组写入文件:

char str[]={'a','b','c','d','e'};
fwrite(str,sizeof(char),sizeof(str),fp)

3.将一个整型数组写入文件:
    int a[]={12,33,23,24,12};
    先计算数组元素个数nmemb,之后
    fwrite(a,sizeof(int),nmemb,fp)
    注:由于程序生成的文件是二进制文件而非文本文件,因此,不用机器,整数的表达不同,
        所以无法直接打开生成文件。可通过fread函数检验数据是否写入文件。

转自:http://purpleroom.blog.sohu.com/133812394.html

博主所有文章已转自私人博客 Joe 的个人博客,谢谢关注!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194544.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 过滤器与拦截器详解图_过滤器 拦截器

    过滤器与拦截器详解图_过滤器 拦截器过滤器详解依赖于servlet容器,实现基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,过滤器一般用于登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换等等操作,便于代码重用,不必每个servlet中进行冗余操作。Java中的Filter并不是一个标准的Servlet,它…

  • 简单描述时间轮_rocketmq 时间轮

    简单描述时间轮_rocketmq 时间轮时间轮作用也是用来作定时器触发任务,只是他更高效,时间复杂度为O(1)。运行原理为了方便理解我们参考钟表的形式,它分为3个层次:时、分、秒,只有秒钟在运动同样的,时间轮也分为多层,同样的只有第一层在运动,举个简单的4层时间轮例子(如下左图),我们假设最小计时单位为1(姑且理解为秒),用time来计时,初始为0,随着time递增,则:我们可以知道time应该落在第一层的位置intfirst_index=time%5当first_index==0,也就是第一层轮巡完毕,就需要将

  • win7蓝屏错误代码对照表(windows蓝屏合集)

    windows蓝屏错误对照表00×00000000作业完成。10×00000001不正确的函数。20×00000002系统找不到指定的档案。30×00000003系统找不到指定的路径。40×00000004系统无法开启档案。50×00000005拒绝存取。60×00000006无效的代码。70×00000007储存体控制区块已毁。80×00000008储存体空间

  • 2018阿里笔试题一道

    2018阿里笔试题一道八卦阵相传是由诸葛亮创设的一种战斗队形和兵力部署,由八种阵势组成。为了方便,采用矩阵来描述一个八卦阵,它由八个单阵组成,每个单阵由多个兵力区域组成形成一种阵势,如下图所示,其中数字为一个兵力区域的士兵个数。假设单阵与单阵之间兵力区域不会相邻,且单阵中每个兵力区域至少存在一个相邻兵力区域(注:相邻是指在其左上,正上,右上,右方,右下,正下,左下,左方与其相邻),请用最快的速度计算出八个单阵中的兵力(…

  • GoLand 2022.01.4激活码(JetBrains全家桶)

    (GoLand 2022.01.4激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlGTRPTN90LV-eyJsaWNlbnNlSW…

  • 计算机网络知识点汇总(谢希仁 第七版)「建议收藏」

    计算机网络知识点汇总(谢希仁 第七版)「建议收藏」写在前面这篇博客是当时在大二的时候为了学习计网总结的一篇学习笔记,其实当时的做法和抄书差不多,但是时隔两年的时间没想到有这么多的同学会来关注学习,实在受宠若惊;现在我已经大四,而且刚刚经历过秋招(2019/12),并且签约了一家薪资待遇不错的Java开发岗,所以在闲下来的时候准备将这篇博客重新整理一下,主要为了几方面:一·将之前没有整理到的内容补充详细;二·为重难点的部分加上详…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号