C语言:标准IO_fopen( )、fclose() ①
思前想后一个月,我终于敲下了我的第一篇开山之作。
博客千千万,我的博客首先记录的是学习时候的理解,用于给自己翻阅查找,现在主要研究的是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() ①的更多相关文章
- C语言文件操作fclose在NDK引起的BUG
今天在NDK中写了一个简单的写入文件操作: FILE *fp = fopen("/sdcard/test.txt","w"); if(fp == NULL) { ...
- 6_PHP AJAX MYSQL
XAMPP套装软件: 包含Apache.MySQL.PHP等多个开源软件的集合. https://www.apachefriends.org/zh_cn/index.html 监听完整相应消息: Wi ...
- SQL SERVER 简介及应用 - 数据库系统原理
SQL SERVER 是一个分布式的关系型数据库管理系统(RDBMS),具有客户 - 服务器体系结构,一般发行的版本有企业版.标准版.个人版.开发版. SQL SERVER 提供的服务 MS SQL ...
- python3.x随手笔记2
对象,价值观和类型 对象 Python的抽象的数据. 所有的数据在一个Python程序 表示对象或对象之间的关系. (在某种意义上,在 符合冯诺依曼模型的代码也“存储程序计算机” 由对象.) 每一个对 ...
- Python笔记·第二章—— Python的编码问题(一)
一.什么是编码 可以说,计算机是一个即聪明又笨蛋的家伙.说它聪明,是因为他可以做很多事情,它的强大无需多说,大家应该都有所了解以及感受.但是为什么说它又是个笨蛋呢,因为我们在电脑上写出的每一个字,保存 ...
- PHP常用功能模块
错误异常模块 错误处理 1. 系统定义了一些二进制码,用来表示错误报告的级别: 在 /etc/php5/apache2/php.ini中修改php配置文件,其中display_errors默认 ...
- 【翻译】A Next-Generation Smart Contract and Decentralized Application Platform
原文链接:https://github.com/ethereum/wiki/wiki/White-Paper 当中本聪在2009年1月启动比特币区块链时,他同时向世界引入了两种未经测试的革命性的新概念 ...
- TCP连接与断开详解(socket通信)
http://blog.csdn.net/Ctrl_qun/article/details/52518479 一.TCP数据报结构以及三次握手 TCP(Transmission Control Pro ...
- MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本
本文主要讲述如何安装 C语言 编译器——MinGW-w64,特点是文章附有完整详细的实际安装过程截图,文字反而起说明提示作用. 编写本文的原因始于我的一个观点:图片可以比文字传达更多的信息,也能让其他 ...
随机推荐
- spark 笔记 15: ShuffleManager,shuffle map两端的stage/task的桥梁
无论是Hadoop还是spark,shuffle操作都是决定其性能的重要因素.在不能减少shuffle的情况下,使用一个好的shuffle管理器也是优化性能的重要手段. ShuffleManager的 ...
- leetcode-easy-listnode-234 Palindrome Linked List
mycode 89.42% # Definition for singly-linked list. # class ListNode(object): # def __init__(self, ...
- QBXT七月D1
今天是lyd神仙讲课的第一天,可以感觉到的是这位神仙有着不同于他人的气质,比如他的表情包(雾) 好了来讲正经的) 今天讲的比较多的是模拟算法和一些比赛中的好习惯 high-level 这个名词的大体意 ...
- golang 开源项目: 配置解析模块--config
在golang中,配置文件经常使用json格式.json格式的语法,有些繁琐,尤其是出现嵌套的时候,每一块都需要大括号包裹,看起来很臃肿. 本着简单易用的原则,个人开发了一个配置解析模块config, ...
- 代码实现:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%; 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%; 20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%; 60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元
import java.util.Scanner; /* 企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%: 利润高于10万元,低于20万元时,低于10万元的部分按10%提成 ...
- matplotlib之折线图
1.案例一 # coding=utf-8 from matplotlib import pyplot as plt import random # 设置字体相关 from matplotlib imp ...
- 如何使用Loadrunner Controller 监控服务器的系统资源
(1)保证装有loadrunner Controller的控制机和被监控的目标机(服务器)之间能够ping通,在同一个网段内,保证两台机器用administrator登陆. (2)Win + R, s ...
- git pull 覆盖本地代码
在使用Git的过程中,有些时候我们只想要git服务器中的最新版本的项目,对于本地的项目中修改不做任何理会,就需要用到Git pull的强制覆盖,具体代码如下: $ git fetch --all $ ...
- C++ lower_bound
代码 #include<iostream> #include<algorithm> using namespace std; int main(void) { ] = { 0. ...
- 数据挖掘竞赛kaggle初战——泰坦尼克号生还预测
1.题目 这道题目的地址在https://www.kaggle.com/c/titanic,题目要求大致是给出一部分泰坦尼克号乘船人员的信息与最后生还情况,利用这些数据,使用机器学习的算法,来分析预测 ...