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,特点是文章附有完整详细的实际安装过程截图,文字反而起说明提示作用. 编写本文的原因始于我的一个观点:图片可以比文字传达更多的信息,也能让其他 ...
随机推荐
- C#的语音识别 using System.Speech.Recognition;
using System; using System.Collections.Generic; using System.Linq; using System.Speech.Recognition; ...
- sharesdk短信验证码的集成
在ShareSDK官网http://mob.com/注册并创建Android应用.申请APP_key,下载SDK等 根据官网开发文档导入SDK,目录结构如下 将以上文件按需放入Android Stud ...
- jenkins与docker(DevOps二)
Jenkins官网 https://jenkins.io/download/ centos 7安装Docker https://www.cnblogs.com/stulzq/p/7743073.htm ...
- nohup及pip命令总结
最近在搭建Python的Web开发环境的时候,用到nohup和pip等一些工具,先简单总结一下,以备后续查用. 1.nohup nohup(no hang up)就是不挂断的意思,如果你正在运行一个进 ...
- Django配置Mysql数据库 (Pycharm)
Django配置MySQL数据库方法 一.settings.py文件中修改数据库配置为下面的内容: # Database # https://docs.djangoproject.com/en/2.0 ...
- 分享我积攒的测试相关的资料收集awesome-test
微信扫描关注我的公众号,回复测试资料 即可免费获取资料下载地址,不定期更新资料
- H3C版本升级
H3C S5500和S3100都可以通过TFTP方式进行升级,1.设置交换机的vlan1的ip地址,如10.10.10.2/242.设置电脑和交换机连接的ip地址,如10.10.10.1/243.在交 ...
- 应用安全 - 工具 | 平台 -webmin - 漏洞 - 汇总
简介 开发语言 PHP 用途系统管理 CVE-2019-15642 Date2019.7 类型远程代码执行 影响范围Webmin <= 1.920 复现POC|EXPOBJECT Socket; ...
- 第j九周学习总结暨第七周实验报告
完成火车站售票程序的模拟. 要求: (1)总票数1000张: (2)10个窗口同时开始卖票: (3)卖票过程延时1秒钟: (4)不能出现一票多卖或卖出负数号票的情况. 一:实验代码 package d ...
- Java Web - 笔记(1)
1.web.xml Attribute "xmlns:xsi" must be declared for element type "web-app"相关报错解 ...