用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)


相关推荐

  • centos强制删除非空文件夹

    centos强制删除非空文件夹命令详情: rm -rf /var/www/html 上面命令会强制删除html这个文件夹,即使是非空文件夹,也会删除,使用的时候要小心加谨慎,linux没有回收站,所以一定要谨慎操作。

  • ES6转ES5_es5与es6的区别

    ES6转ES5_es5与es6的区别es6转码es5一.Babel在线转码二.谷歌的Traceur在线转码三.es6console在线转码并运行四.Traceur在页面中引入使用//加载Traceur文件<scriptsrc=”https://google.github.io/traceur-compiler/bin/traceur.js”></script>//这两个是将上…

  • stm32串口工作原理_rs232串口通信原理

    stm32串口工作原理_rs232串口通信原理STM32F1xx官方资料:《STM32中文参考手册V10》-第25章通用同步异步收发器(USART)通信接口背景知识设备之间通信的方式一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种。它们的区别是:并、串行通信的区别 并行通信 串行通信 传输原理 数据各个位同时传输 数据按位顺序传输 优点 速度快 占用引脚资…

  • mysql日期格式转换_MySQL日期格式转换

    mysql日期格式转换_MySQL日期格式转换DATE_FORMAT(date,format):根据参数对date进行格式化。1234SELECTDATE_FORMAT(‘2016-01-1622:23:00′,’%W%M%Y’)SELECTDATE_FORMAT(‘2016-01-1622:23:00′,’%D%y%a%d%m%b%j’)SELECTDATE_FORMAT(‘2016-01-1622:23:00’…

  • 史上最详细阿里云服务器搭建网站流程(图文教程)

    史上最详细阿里云服务器搭建网站流程(图文教程)新手如何用阿里云服务器Linux系统安装宝塔面板搭建WordPress博客网站呢?WordPress作为全球实用最广泛的CMS系统,以功能强大、扩展性强,插件众多,易扩充功能等特点,受到全球站长开发者青睐。而阿里云作为国内用户量最多的云服务器商,因此,本文以阿里云为例,详细介绍云服务器Linux系统如何安装宝塔面板搭建WordPress博客网站。新手如何用阿里云服务器Linux系统安装宝塔面板搭建WordPress博客网站呢?WordPress作为全球实用最广泛的CMS系统,以功能强大、扩展性强,插件众

  • pycharm中格式化快捷键是什么_pycharm快捷键大全

    pycharm中格式化快捷键是什么_pycharm快捷键大全(1)快捷键:Ctrl+Alt+L可以将代码格式工整化(2)鼠标点击

    2022年10月27日

发表回复

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

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