fopen, fwrite, fread详解

1、头文件

#include <stdio.h>

2、fopen

(1) 函数原型

FILE *fopen(char *filename, *type)

函数用来打开一个文件

(2) 参数解析

  • filename,文件名
  • type,打开方式

  字符及其含义:

  打开方式由r,w,a,t,b,+这六个字符拼成,含义如下

  r(read):读

  w(write):写

  a(append):追加

  t(txt):文本文件,可省略

  b(banary):二进制文件

  "r"            打开文字文件只读

  "w"           创建文字文件只写

  "a"           增补, 如果文件不存在则创建一个

  "r+"          打开一个文字文件读/写

  "w+"         创建一个文字文件读/写

  "a+"         打开或创建一个文件增补

  "b"           二进制文件(可以和上面每一项合用)

  "t"           文这文件(默认项)

  使用方式及含义
  “rt”      只读打开一个文本文件,只允许读数据 
  “wt”      只写打开或建立一个文本文件,只允许写数据
  “at”      追加打开一个文本文件,并在文件末尾写数据
  “rb”      只读打开一个二进制文件,只允许读数据
  “wb”        只写打开或建立一个二进制文件,只允许写数据
  “ab”        追加打开一个二进制文件,并在文件末尾写数据
  “rt+”       读写打开一个文本文件,允许读和写
  “wt+”      读写打开或建立一个文本文件,允许读写
  “at+”       读写打开一个文本文件,允许读,或在文件末追加数 据
  “rb+”       读写打开一个二进制文件,允许读和写 
  “wb+”      读写打开或建立一个二进制文件,允许读和写
  “ab+”       读写打开一个二进制文件,允许读,或在文件末追加数据

  ① 用”r”打开文件时,该文件必须存在,只读

  ② 用”w”打开文件时,若文件不存在,则创建,若存在,则将其删除,再创建一个文件

  ③ 用”a”打开文件时,可在其末尾写数据

(3) 函数调用成功返回FILE*指针,失败返回NULL

3、fwrite

(1) 函数原型

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

(2) 参数解析

  • ptr,要写入的数据的指针
  • size,每个数据类型的大小
  • count,数据个数
  • stream,文件指针

(3) 函数调用成功返回写入数据的个数,如果返回值与count不同,为写错误

(4) 写操作后最好调用fclose关闭流。

4、fread

(1) 函数原型

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream )

(2) 参数解析

  • ptr,读取数据保存结果的指针
  • size,每个数据类型的大小
  • count,数据个数
  • stream,文件指针

(3) 函数调用成功返回读取的数据个数,如果返回值与count不同,为读错误或者达到文件末尾

5、不关闭流的情况下,每次读或写数据后,文件指针都会指向下一个待写或者读数据位置的指针。

6、size_t

size_t类型是ANSI C提供的标准头文件里的一个数据类型,头文件为:#include <stddef.h>。该头文件一般位于/usr/lib/gcc/i486-linux-gnu/4.3.2/include目录下。定义如下:

#define  __SIZE_TYPE__  long unsigned int

#define  __SIZE_TYPE__  size_t

也就是说size_t实际是long unsigned int类型,在32位机器上为4字节,在64位机器上为8字节。

7、程序示例:

 #include <stdio.h>

 int main()
{
FILE* file = fopen("/home/share/code/fopen_test/test.txt", "wt+");
if(file == NULL)
{
printf("fopen error");
return -;
} size_t write_ret = fwrite("hello world", , sizeof("hello world"), file);
if(write_ret != sizeof("hello world"))
{
printf("fwrite error");
return -;
} //将文件指针定位到文件开始,否则读取不到数据
fseek(file, , SEEK_SET); char buf[] = {};
size_t read_ret = fread(buf, , sizeof("hello world"), file);
if(read_ret != sizeof("hello world"))
{
printf("fread error");
return -;
} fclose(file);
printf("%s\n", buf); return ;
}

fopen,fwrite,fread使用的更多相关文章

  1. PHP读写大“二进制”文件,不必申请很大内存(fopen、fread、fwrite、fclose)

    <?php /** * 读写大二进制文件,不必申请很大内存 * 只有读取到内容才创建文件 * 保证目录可写 * * @param string $srcPath 源文件路径 * @param s ...

  2. (转载)C++文件读写函数之——fopen、fread和fwrite、fgetc和fputc、fgets和fputs、ftellf和fseek、rewind

    http://blog.sina.com.cn/s/blog_61437b3b0102v0bt.html http://blog.csdn.net/chenwk891/article/details/ ...

  3. open/fopen read/fread write/fwrite区别

    fopen /open区别 UNIX环境下的C 对二进制流文件的读写有两套班子:1) fopen,fread,fwrite ; 2) open, read, write这里简单的介绍一下他们的区别.1 ...

  4. C++文件读写函数之——fopen、fread和fwrite、fgetc和fputc、fgets和fputs、ftellf和fseek、rewind

    由于最近经常使用到c语言中的读写文件,所以在此总结以下,方便以后查找. 在c中,文件操作都是由库函数来实现的,主要是分为读和写两种操作,以下详细讲解以下所有有关文件操作的邯郸乎的用法: //C++写入 ...

  5. 文件流:"fopen","fclose",“ftell”"fseek","fgets","fprintf" ,“feof”,"fwrite","fread"

    char const* filename="D:/hello.txt"; 路径名使用的是“/”或者使用 转义字符“\\”: "fopen", FILE *fp= ...

  6. Linux C 文件操作,系统调用 -- open()、read() 和 标准I/O库 -- fopen()、fread()

    函数汇总: open().write().read().close() fopen().fwrite().fread().fclose() 一.什么是文件 在讲述文件操作之前,我们首先要知道什么是文件 ...

  7. matlab文件操作及读txt文件(fopen,fseek,fread,fclose)

    文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件.MATLAB提供了一系列低层输入输出函数,专门用于文件操作. 1.文件的打开与关闭 1)打开文件 在读写文件之前,必须先用f ...

  8. C-fopen,fwrite,fread,fseek,fgets,popen,access笔记

    FILE * fopen(const char * path,const char * mode); 所需库: <stdio.h> 返回值 FILE是C语言定义的标准数据结构,如果open ...

  9. fwrite & fread 的使用

    每一次切换文件操作模式必须调用fclose关闭文件. 如果直接切换操作模式,文件将损坏(出现乱码)或操作失败. 在调用了fclose时,作为参数的文件指针将被回收,必须再次定义,因此最好将功能封装. ...

随机推荐

  1. ThinkPHP5.0版本的优势在于:

    更灵活的路由: 依赖注入: 请求缓存: 更强大的查询语法: 引入了请求/响应对象: 路由地址反解生成: 增强的模型功能: API开发友好: 改进的异常机制: 远程调试支持: 单元测试支持: 命令行工具 ...

  2. March 31 2017 Week 13 Friday

    Sometimes, you think the sky is falling down, actually, that is just because you stand slanting. 有时候 ...

  3. ANT 的Table表格样式修改方法

    注:(大家在给页面添加参数或者方法的时候,记得写上注释,方便别人查看) 1.表格行选中样式添加:(可以去beijing,精子库质控统计查看例子) (咱们以前页面上的表格都是在hover时显示选中效果, ...

  4. OC 枚举

    void test() { // 定义一种枚举类型 enum Season {spring, summer, autumn, winter}; // 定义一个枚举变量s enum Season s = ...

  5. “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法

    “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> 接口或 IQueryable& ...

  6. { ($0, Resolver($0.box)) }(Promise<T>(.pending)):闭包的定义与执行合一

    public class func pending() -> (promise: Promise<T>, resolver: Resolver<T>) { return ...

  7. POJ 2942 圆桌骑士

    之前做过这个题目,现在回想起来,又有新的柑橘. 求必须出去的骑士人数. 每一个双连通分量,如果是一个奇圈,那么一定是二分图染色失败. 依次遍历每个双连通分量,但是,对于邻接表中,有一些点不是双连通分量 ...

  8. [USACO17JAN]Subsequence Reversal

    嘟嘟嘟 这题刚开始是什么思路也没有,关键是不知道怎么解决序列反转的问题. 然后我就想到如果暴力反转一个序列的话,实际上就是不断交换数组中的两个数ai和aj,同时要满足交换的数不能交叉. 然后又看了一眼 ...

  9. UVA11294 Wedding

    嘟嘟嘟 大佬们都说这是2-SAT入门题,然而对于刚学2_SAT的本菜鸡来说半天才理解…… 题面:新娘和新郎不能坐在同一侧,妻子和丈夫不能坐在同一侧,有**关系的两个人必须至少一个坐在新娘一侧,问方案. ...

  10. Git免密码提交

    下面说一下https克隆的方式免密码提交 在我们下载链接前面加上账号:密码@即可 方式一: 使用https的方式克隆代码 git clone '地址' 查看项目中的配置文件 vim .git/conf ...