fread、fwrite、fopen函数的简单使用和open、read、write区别解析

这几个函数的区别:fread、fwrite、fopen和open、read、write区别解析

标准C库函数的简单使用

fopen函数原型:

#include <stdio.h>
FILE *fopen(const char *pathname, const char *mode);第一个参数是:要打开的文件路径
第二个参数是:以什么权限打开
文件顺利打开后,指向该流的 文件指针(FILE*) 就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。
mode打开模式(注意双引号):
“r”  以只读方式打开文件,该文件必须存在。“r+” 以可读写方式打开文件,该文件必须存在。”rb+“ 读写打开一个 二进制文件,允许读写数据(可以任意修改),文件必须存在。“w”   打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。“w+”  打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。“a”   以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(
EOF符保留)”a+“  以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
(原来的EOF符不保留)“wb”  只写打开或新建一个 二进制文件;只允许写数据(若文件存在则文件长度清为零,即该文件内容会消失)“wb+” 读写打开或建立一个二进制文件,允许读和写(若文件存在则文件长度清为零,即该文件内容会消失)

fwrite函数:

#include <stdio.h>
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);ptr:是一个指向用于保存数据的内存位置的指针(是一个指针,对于fwrite来说,是要获取数据的地址)
size:   是每次读取的字节数
nmemb:  是读取的次数
stream: 是数据写入的流(目标指针的文件)
返回值:
成功,该函数返回一个 size_t 对象,表示元素的总数(其实就是nmemb),该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。
失败:返回0
是实际写入的元素(并非字节)数目
ps:如果输入过程中遇到了文件尾或者输出过程中出现了失误,这个数字可能比请求的元素数目要小

fread函数:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);buffer:  是读取的数据存放的内存的指针,(可以是数组,也可以是新开辟的空间)ps:   是一个指向用于保存数据的内存位置的指针(为指向缓冲区保存或读取的数据或者是用于接收数据的内存地址)
size:   是每次读取的字节数
nmemb:  是读取的次数
stream:  是要读取的文件的指针ps: 是数据读取的流(输入流)返回值:
成功:是实际读取的元素(并非字节)数目,当目标缓冲区是20字节时,而读100次,返回的是实际读到有字节的次数。
失败:返回0
ps:如果输入过程中遇到了文件尾或者输出过程中出现了错误,这个数字可能比请求的元素数目要小

fseek函数:

int fseek( FILE *stream, long offset, int origin );
第一个参数stream为文件指针
第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CURSEEK_ENDSEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CURSEEK_END和依次为012.
返回值:成功返回0,失败返回非0.

代码的综合:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{FILE *fp;//定义文件指针char* buf="ffffff";char* readbuf=NULL;readbuf=(char*)malloc(strlen(buf));int n_write;int n_read;fp=fopen("./filetest","w+");if(fp==NULL){printf("文件打开失败\n");perror("fopen");exit(0);}n_write=fwrite(buf,sizeof(char),strlen(buf),fp);if(n_write==0){printf("写入失败\n");perror("fwrite");exit(0);}fseek(fp,0,0);n_read=fread(readbuf,sizeof(char),strlen(buf),fp);if(n_read==0){printf("读取失败\n");perror("fread");exit(0);}fseek(fp,0,0);n_read=fread(readbuf,sizeof(char),strlen(buf),fp);if(n_read==0){printf("读取失败\n");perror("fread");exit(0);}printf("写入:%d个,读出:%d个,内容为:%s\n",n_write,n_read,readbuf);fclose(fp);return 0;
}

fputc、fputs、feof、fgetc、fgets函数:

int fputc(int c, FILE *stream);
参数:c:字符fp:文件指针
返回值:成功:返回写入的字符失败:返回EOF
int fputs(const char *s, FILE *stream);
参数:s:字符串fp:文件指针
返回值:成功:返回非负数失败:返回EOFfgetc函数原型:int fgetc(FILE *stream);从文件fp中读入一个字节,指针自动后移为什么fgetc返回的是int而不是char?
通过man fgetc查看其返回值:fgetc(), getc() and getchar() return the character read as an unsigned char cast to an int or EOF on end of file or error.
返回时,unchar型会被转换为int,因为读到文件尾时需要返回的是EOF-1, 如果为char型,-10XFF相等,会发生冲突
返回值: 若成功,则返回读取的“字节”,同于fputc函数的 ch,到达文件尾,返回EOF结束函数原型char * fgets(char *str,int n,FILE *fp)从文件中每次读入一行。
str是存放将要读入字符型数据的存放地址
n是数目变量
fp是文件指针
该函数表明从文件fp中读入n-1个字符放在以str为起始地址的空间
因为系统会在最后加上一个‘\0’。读入过程中:
若该行字符数不超过n-2(2代表该行本身的换行符‘\n’和系统自动加上的'\0')
则函数读完该行就结束,文件指针移动到下一行,再进行文件读入操作时,从下一行开始读入。若该行字符数目总数(不包含换行符)大于n-2,则只读入n-1个字符(1代表系统自己加上的'\0')
文件指针自动移动到下一个字符处,再进行文件读入操作时,顺序读入该行剩下的字符。返回值:
文件读入成功则返回str,失败或者读到文件尾则返回null。feof 函数原型:int feof(FILE *stream);
feof()是检测流上的文件结束符的函数,如果文件结束,则返回非0值,否则返回0

大佬博客:fgets 函数用法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker安装rocketmq你学会了吗

防火墙开通端口 9876 10911 9800 firewall-cmd --zonepublic --add-port9876/tcp --permanent firewall-cmd --zonepublic --add-port10911/tcp --permanent firewall-cmd --zonepublic --add-port9800/tcp --permanent firewall-cmd --reload 创建存储文件夹 mkdir -p /root…

程序员的编程能力与编程年龄

作者丨酷壳/陈皓&#xff0c; http://coolshell.cn/articles/10688.html程序员这个职业究竟可以干多少年&#xff0c;在中国这片神奇的土地上&#xff0c;很多人都说只能干到30岁&#xff0c;然后就需要转型&#xff0c;就像《程序员技术练级攻略》这篇文章很多人回复到这种玩…

Rocketmq集群架构图

集群架构图 集群特点

进程相关概念、C程序的空间分配

进程的定义&#xff1a; “进程”是操作系统的最基本、最重要的概念之一。但迄今为止对这一概念还没有一个确切的统一的描述。下面给出几种对进程的定义描述。 进程是程序的一次执行。进程是可以并行执行的计算。进程是一个程序与其使用的数据在处理机上顺序执行时发生的活动。…

(精)C#中TransactionScope的使用方法和原理

标签&#xff1a;.net transactionscope原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://cnn237111.blog.51cto.com/2359144/1271600在.net 1.1的时代&#xff0c;还没有TransactionScope…

一文搞定并发面试题

1、Object 的 wait()和notify() 方法下图为线程状态的图&#xff1a;Object 对象中的 wait()和notify()是用来实现实现等待 / 通知模式。其中等待状态和阻塞状态是不同的。等待状态的线程可以通过notify() 方法唤醒并继续执行&#xff0c;而阻塞状态的线程则是等待获取新的锁。…

fork、vfork、wait、waitpid

fork函数&#xff1a; 一个进程&#xff0c;包括代码、数据和分配给进程的资源。fork&#xff08;&#xff09;函数通过系统调用创建一个与原来进程几乎完全相同的进程&#xff0c;也就是两个进程可以做完全相同的事&#xff0c;但如果初始参数或者传入的变量不同&#xff0c;两…

java解析xml

<?xml version"1.0" encoding"UTF-8"?> <mimetype><default><mime-type>text/html</mime-type></default><mime-mapping><extension>zip</extension><mime-type>application/zip</mime-…

Linux常见英文报错中文翻译(菜鸟必知)

Linux常见英文报错中文翻译(菜鸟必知)1.command not found 命令没有找到2.No such file or directory 没有这个文件或目录3.Permission denied 权限不足4.No space left on device 磁盘没有剩余空间5.File exists 文件已经存在6.Is a directory 这是1个目录7.Not a directory 不…

阿里开源分布式事务seata带你入门

介绍 Seata 是阿里巴巴开源的分布式事务中间件&#xff0c;一种分布式事务解决方案&#xff0c;具有高性能和易于使用的微服务架构。 1:对业务无侵入&#xff1a;即减少技术架构上的微服务化所带来的分布式事务问题对业务的侵入 2:高性能&#xff1a;减少分布式事务解决方案…

exec族函数、system函数、popen函数、PATH

exec族函数函数的作用&#xff1a; 我们用fork函数创建新进程后&#xff0c;经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时&#xff0c;该进程被完全替换为新程序&#xff08;在exec都后面的代码不会被得到执行&#xff09;。因为调用exec函数并不创建…

jquery.validate.unobtrusive的使用

应用 一、引入 <script src"Scripts/jquery-1.7.1.min.js"></script> <script src"Scripts/jquery.validate.js"></script> <script src"Scripts/jquery.validate.unobtrusive.js"></script> 二、1&#xf…

Linux操作系统六大优点

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

[webview] 放大缩小的问题

http://www.cocoachina.com/bbs/read.php?tid33249转载于:https://www.cnblogs.com/zxykit/p/5274831.html

进程间通信IPC(一)(半双工管道和消息队列)

引言&#xff1a; 之前学习的进程之间交换信息的方法只能由fork或exec传送打开文件&#xff0c;或者文件系统。但是这种通讯方式有局限性&#xff0c;接下来将说明进程之间相互通信的其他技术——IPC(InterProcessCommunication)&#xff0c;过去UNIX系统IPC是各种进程间通信方…

Seata相关概念

相关概念 XID&#xff1a;一个全局事务的唯一标识 Transaction Coordinator (TC)&#xff1a; 事务协调器&#xff0c;维护全局事务的运行状态&#xff0c;负责协调并驱动全局事务的提交或回滚&#xff08;可以理解为事务的协调者&#xff09;。 Transaction Manager (TM)&…

VSS配置

http://www.cnblogs.com/FreeDong/articles/2193151.html转载于:https://www.cnblogs.com/lacey/p/5275514.html

Program terminated with signal SIGSEGV, Segmentation fault.

问题&#xff1a; 在程序运行时出现了&#xff1a;Segmentation fault (core dumped)&#xff0c;分段故障(堆芯转储)也就是段错误。 我首先在一篇博客上面找到如何使用gdb调试&#xff1a; 1、首先使用ulimit -a查看你的core file size是否为0.如果不是的话就请跳到步骤3&am…