思前想后一个月,我终于敲下了我的第一篇开山之作。

博客千千万,我的博客首先记录的是学习时候的理解,用于给自己翻阅查找,现在主要研究的是C语言和STM32。如果能帮到你,那是最好的,假如我写的东西有错误欢迎指正,所以请反复对比,仅作参考。其次,这里不仅记录学习,也会写下我在朋友圈不能公开的想法和秘密!

马上进入主题


一、什么是文件?

  我相信,就算接触过C语言的文件输入输出的人,还会回答:文件不就是鼠标点击的东西嘛!其实不全对,因为在C语言程序中,文件有着更广泛的定义:文件通常是在磁盘或硬盘上的已命名的储存区。

要看到是通常,那么就说明会有不寻常的。对于C程序来说,设备也可以看成是文件!例如屏幕和键盘。看到这里的朋友会有一个疑问:那么C程序和语言有什么关系呢?文件对C程序有什么重要性呢?

简单地理解,文件能够输入一些必要的数据给程序使用以及程序输出数据到文件保存。

  1.1  文件的两种形式

  在C程序看来,文件只有两种形式。

  •   文本文件
  •        二进制文件 

文本文件即里面的数据都是字符。 字符传化成对应的ASCII码存放在内存中。如“ABC”就分别是‘A’、'B'、'C'存放

二进制文件即里面的数据直接存放在内存中。无需转换为ASCII码,可以理解为机器语言(只有0和1)。例如整数1000转换为二进制为‭0010 0111 0001 0000‬,直接存储在内存中。

二、利用标准IO操作文件

  2.1  标准IO(standard high-level I/0)是什么

    标准IOANSI C建立的标准函数包和stdio.h头文件中的定义。通俗的来讲就是一些操作IO的库函数,至于是怎么实现的我也不知道。今天我们来讲三个函数:fopen(),  fclose().

分别对应着打开文件、关闭文件两个功能。

    其次,与标准IO对应着的还有文件IO或者叫底层IO(low-level I/O)。暂时不需要关心。

2.2  标准文件

    一开始提到,一些设备都被C程序看做是文件。所以C语言定义了三个标准文件:标准输入(standard input)标准输出(standard output)标准错误输出(standard error output).

分别对应着键盘屏幕屏幕。但是,标准错误输出强制性输出到屏幕(即使重定向到其他文件啦显示错误信息)。看到这里看不懂没关系,我们结合下面的函数讲解就懂了。

标准文件和对应文件指针
标准文件 文件指针 通常使用的设备
标准输入 stdin 键盘
标准输出 stdout 显示器  
标准错误输出 stderr 显示器

文件指针是即将要讲到函数里面的C语言里一个特殊的指针。

 

三、  fopen()

函数介绍:

打开或创建一个文件并且返回一个文件指针。

函数原型:

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

FILE为一个结构体 但是这个结构体太复杂,暂时不需要弄清楚。

 函数详解:

参数1:const char *path ,这是一个指针,char表明指向的是一个字符串,const表明不能通过path指针变量去修改这个字符串。

  这个字符串指定了你要准备打开或创建的文件路径和名称,例如“我好饿啊.txt”

参数2:设置打开的模式。可输入的参数有如下:

模式 含义
“r” 只能读
“w” 只能写,无此文件则创建,有此文件则清空
“a” 只能写,会在原来的文件后面添加内容。无此文件则创建文件
“r+” 读写文件
“w+” 读写文件,无此文件则创建,有此文件则清空
“a+” 读写文件,会在原来的文件后面添加内容。无此文件则创建文件

上述打开的都是文本本件

此外还有"rb", "wb", "ab", "r+b", "w+b", "a+b",此时打开二进制文件。

path 参数可以是相对路径(../fishc.txt)也可以是绝对路径(/home/FishC/fishc.txt),如果只给出文件名而不包含路径,则表示该文件在当前文件夹中

返回值:

1. 如果文件打开成功,则返回一个指向 FILE 结构的文件指针;

2. 如果文件打开失败,则返回 NULL 并设置 errno 为指定的错误。

举例子:

    FILE *fp;                //定义一个文件指针
fp=fopen("c语言数据.txt","r") //以只读的方式打开文本文件,并返回一个文本指针给fp

然后我们接下来就可以通过fp去操作文件,至于怎么实现不用管。可以理解为fp现在就指向了一个实际的txt文件。

而且,我们可以用过改变第二个参数感受一下他们之间的区别。

四、fclose()

函数介绍:

关闭文件先前用fopen()打开的文件

关闭后会把缓冲区的数据送到程序或者文件(要看先前对文件的操作是读取文件数据还是输出数据到文件)

函数原型:

    int fclose(FILE *fp);

函数详解:

参数:是一个文件指针,指向要关闭的文件。例如先前通过fopen()把创建的文件给了fp,现在fp则代表着这个文件,操作fp即可关闭文件。

返回值:

1. 如果文件关闭成功,返回值是 0;

2. 如果文件关闭失败,返回值是 EOF,并设置 errno 为指定的错误。

记得操作完文件之后要用fclose(),因为调用了fclose函数才能把缓冲区的数据送到指定的地方。fopen和fclose最好同时使用。

接下来我还会继续讲我对缓冲区和流的理解哦,以及fflush函数及其相关代码例子。敬请期待!

  

C语言:标准IO_fopen( )、fclose() ①的更多相关文章

  1. C语言文件操作fclose在NDK引起的BUG

    今天在NDK中写了一个简单的写入文件操作: FILE *fp = fopen("/sdcard/test.txt","w"); if(fp == NULL) { ...

  2. 6_PHP AJAX MYSQL

    XAMPP套装软件: 包含Apache.MySQL.PHP等多个开源软件的集合. https://www.apachefriends.org/zh_cn/index.html 监听完整相应消息: Wi ...

  3. SQL SERVER 简介及应用 - 数据库系统原理

    SQL SERVER 是一个分布式的关系型数据库管理系统(RDBMS),具有客户 - 服务器体系结构,一般发行的版本有企业版.标准版.个人版.开发版. SQL SERVER 提供的服务 MS SQL ...

  4. python3.x随手笔记2

    对象,价值观和类型 对象 Python的抽象的数据. 所有的数据在一个Python程序 表示对象或对象之间的关系. (在某种意义上,在 符合冯诺依曼模型的代码也“存储程序计算机” 由对象.) 每一个对 ...

  5. Python笔记·第二章—— Python的编码问题(一)

    一.什么是编码 可以说,计算机是一个即聪明又笨蛋的家伙.说它聪明,是因为他可以做很多事情,它的强大无需多说,大家应该都有所了解以及感受.但是为什么说它又是个笨蛋呢,因为我们在电脑上写出的每一个字,保存 ...

  6. PHP常用功能模块

    错误异常模块 错误处理 1. 系统定义了一些二进制码,用来表示错误报告的级别:     在 /etc/php5/apache2/php.ini中修改php配置文件,其中display_errors默认 ...

  7. 【翻译】A Next-Generation Smart Contract and Decentralized Application Platform

    原文链接:https://github.com/ethereum/wiki/wiki/White-Paper 当中本聪在2009年1月启动比特币区块链时,他同时向世界引入了两种未经测试的革命性的新概念 ...

  8. TCP连接与断开详解(socket通信)

    http://blog.csdn.net/Ctrl_qun/article/details/52518479 一.TCP数据报结构以及三次握手 TCP(Transmission Control Pro ...

  9. MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本

    本文主要讲述如何安装 C语言 编译器——MinGW-w64,特点是文章附有完整详细的实际安装过程截图,文字反而起说明提示作用. 编写本文的原因始于我的一个观点:图片可以比文字传达更多的信息,也能让其他 ...

随机推荐

  1. spark MLlib 概念 5: 余弦相似度(Cosine similarity)

    概述: 余弦相似度 是对两个向量相似度的描述,表现为两个向量的夹角的余弦值.当方向相同时(调度为0),余弦值为1,标识强相关:当相互垂直时(在线性代数里,两个维度垂直意味着他们相互独立),余弦值为0, ...

  2. [论文理解] Spatial Transformer Networks

    Spatial Transformer Networks 简介 本文提出了能够学习feature仿射变换的一种结构,并且该结构不需要给其他额外的监督信息,网络自己就能学习到对预测结果有用的仿射变换.因 ...

  3. 图片存进Mat类中,然后调用图像矩阵元素

    Mat img = imread();//灰度图 imwrite("origin.png",img); if(img.empty()) { cout << " ...

  4. LinuxGPIO中文文档

    本文来自Linux官方文档英文版,由于需要使用Linux的GPIO进行实验,我翻译了这篇文档. 本文档描述了GPIO框架的使用者接口.注意它描述了新的基于描述符的接口. 不推荐使用的基于整数的GPIO ...

  5. Python之标示符和关键字

    <1>标示符 开发人员在程序中自定义的一些符号和名称 标示符是自己定义的,如变量名 .函数名等 <2>标示符的规则 标示符由字母.下划线和数字组成,且数字不能开头 python ...

  6. 从pip+requirements.txt+virtualenv管理依赖到使用pipenv管理依赖-修改布署方式

    背景: 已经使用pip+requirements.txt+virtualenv管理了项目一段时间,为了不要每次都 导出依赖(本地),安装依赖(服务器) 现在要使用pipenv来管理项目的依赖关系 思路 ...

  7. Java关键字之static的典型用法分析

    static关键字是java中非常重要的一个关键字,用的好的话可以提高程序的运行性能,优化程序结构.接下来我们来总结一下static关键字及其用法.1.static变量 static变量也称作静态变量 ...

  8. The window object

    At the core of the BOM is the window object, which represents an instance of the browser. The window ...

  9. Linux man及echo的使用

    学习目标: 通过本实验掌握man和echo两个命令的用法. 实验步骤: 1.通过man查询ls的详细用法,后面可以跟哪些参数,每个参数的作用.这里主要查找如何禁止ls彩色结果输出. 2.把查找到的参数 ...

  10. C++中内联函数的用法

    程序带调用函数需要一定的时间\空间花销,这就要求在主程序进行过程中调用函数前几下执行指令的地址及其他相关信息,一边函数调用后能继续执行.函数调用后流程返回先前记下的地址处,并根据记录的相关信息回复,而 ...