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

博客千千万,我的博客首先记录的是学习时候的理解,用于给自己翻阅查找,现在主要研究的是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. JAVA-ThreadPoolExecutor 线程池

    一.创建线程池 /** * @param corePoolSize 核心线程池大小 * 当提交一个任务到线程池时,如果当前 poolSize < corePoolSize 时,线程池会创建一个线 ...

  2. 五一 DAY 3

    DAY 3      2019.4.30 动态规划DP Dp是一个很抽象的东西 方法没有明显区别,很难总结套路 啥是DP? DP等价于DAG!!! (1)无后效性:DP的所有状态之间组成一个DAG ( ...

  3. OpenCV学习笔记(3)——图像的基本操作

    获取图像的像素值并修改 获取图像的属性(信息) 图像的ROI() 图像通道的拆分及合并 1.获取并修改像素值 先读入图像装入一个图像实体,然后该实体相当于一个多维list,可以直接用数组操作提取像素信 ...

  4. vue路由在keep-alive下的刷新问题

    问题描述: 在keep-alive中的在跳转到指定的路由时刷新对应的路由,其余不刷新. <transition name="fade" mode="out-in&q ...

  5. css中相对定位和绝对定位

    相对定位: #box_relative { position: relative; left: 30px; top: 20px; } 绝对定位: #box_relative { position: a ...

  6. Web自动化测试—— Selenium+Python Windows环境搭建

    环境搭建前的准备: 1.到Python官网下载Python安装包:https://www.python.org/ 如果不能访问,可以试试下面的解决办法: a).安装VPN网络连接工具,推荐用Green ...

  7. java里poi操作Excel工具类【我改】

    参考原文: https://www.cnblogs.com/yizhang/p/7244917.html 我改: package test; import java.io.File; import j ...

  8. RTX修改标题logo方法

    摘要: 打开“腾讯通RTX管理器”→“配置向导”→“服务运行状态”→“停止所有服务”,退出“腾讯通RTX管理器”按照如下操作.①修改到期时间为:9999-12-300:0:0 用记事本打开“C:/Pr ...

  9. java:Hibernate框架3(使用Myeclipse逆向工程生成实体和配置信息,hql语句各种查询(使用hibernate执行原生SQL语句,占位符和命名参数,封装Vo查询多个属性,聚合函数,链接查询,命名查询),Criteria)

    1.使用Myeclipse逆向工程生成实体和配置信息: 步骤1:配置MyEclipse Database Explorer: 步骤2:为项目添加hibernate的依赖: 此处打开后,点击next进入 ...

  10. 【嵌入式开发】用 VLC 显示 树莓派摄像头 H264 裸流

    首先树莓派连上网络,并和电脑在同一网段. 树莓派的IP是: 192.168.3.13 电脑的IP是: 192.168.3.6 1.在树莓派上采集 H264裸流,并用UDP发送到电脑. pi@Neil- ...