第三季-第9课-库函数方式文件编程
第9课-库函数方式文件编程
9.1 核心理论
1. 函数库
基于C语言函数库的文件编辑是独立于具体操作系统平台的,不管是windows、linux还是其他的操作系统,都是使用这些函数。使用库函数进行函数程序设计可以提高函数的可移植性。
- 流
对于标准的C函数库,它们的操作都是围绕流来进行的。流是一个抽象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。
- 文件指针
在系统调用方式实现的文件访问中,使用文件描述符(一个整数)来指向一个文件。在库函数方式的文件访问中,使用FILE类型来表示一个打开的文件,这个类型中包含了管理文件流的信息。而指向件,这个类型中包含了管理文件流的信息。而指向该类型的指针FILE* 则被称之为文件指针。
它和文件描述符的作用是一样的。
9.2 函数学习
学习方法:三不学习法。
先在《UNIX环境高级编程》中找到相关的命令;通过man命令查看函数入队用法和原型等信息;手把手写代码。
- 打开文件
(1)函数名
fopen
(2)函数原形
FILE *fopen(const char *path,const char *mode);
(3)函数功能
打开文件
(4)所属头文件
#include<stdio.h>
(5)返回值
成功:文件指针
失败:NULL
(6)参数说明
path:指定打开的文件名(包含路径)
mode:文件打开模式
有六种方式:r,w,a,r+,w+,a+
(7)范例程序
#include<stdio.h>
void main()
{
FILE *fd;
fd = fopen("/home/test.txt","w+"); //w+表示在文件不存在的时候可以创建文件。
}
- 关闭文件
(1)函数名
fclose
(2)函数原形
int fclose(FILE *fp);
(3)函数功能
关闭文件
(4)所属头文件
#include<stdio.h>
(5)返回值
成功:0
失败:EOF
(6)参数说明
fp:待关闭的文件指针
- 读文件
(1)函数名
fread
(2)函数原形
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
(3)函数功能
从文件中读取数据
(4)所属头文件
#include<stdio.h>
(5)返回值
成功:成功读取到的数据量
失败:0
(6)参数说明
stream:指向要读取的文件
ptr:指向我们读取后的数据保存位置
nmemb:我们要把读取的数据分成nmemb个块
size:读取数据已经分成nmemb个块,每个块的大小是size。
(7)范例程序
最开始我们使用下面的程序,通过更改/home下的文件,给我们要打开的文件赋予一些数据。但是,我们会发现打印不出来数据。
#include<stdio.h>
void main()
{
FILE *fd;
char c_buf[15];
fd = fopen("/home/test.txt","w+");
fread(c_buf,1,10,fd);
printf("now we read %s\n",c_buf);
fclose(fd);
}
问题出现在w+这个参数上。我们看一下这个参数的说明:open for reading and writing. The file is craet if it does not exist, otherwise it is truncated. The stream is positioned at the beginning of the fie. 改成下面的程序就可以了:
#include<stdio.h>
void main()
{
FILE *fd;
char c_buf[15];
fd = fopen("/home/test.txt","r+");
fread(c_buf,1,10,fd);
c_buf[10] = '\0'; //加上终止符,防止打印时出现乱码。
printf("now we read %s\n",c_buf);
fclose(fd);
}
- 写文件
(1)函数名
fwrite
(2)函数原形
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
(3)函数功能
向文件中写入数据
(4)所属头文件
#include<stdio.h>
(5)返回值
成功:成功写入的数据量
失败:0
(6)参数说明
stream:要写入数据的文件指针
ptr:存放要写入到文件中的数据
nmemb:我们要把写入的数据分成nmemb个块
size:写入数据已经分成nmemb个块,每个块的大小是size。
(7)范例程序
#include<stdio.h>
void main()
{
FILE *fd;
char *c_buf = "987654321";
fd = fopen("/home/test.txt","r+");
fwrite(c_buf,5,1,fd);
fclose(fd);
}
- 文件定位
每一个打开的文件都有一个隐形的指针。
(1)函数名
fseek
(2)函数原形
int fseek(FILE *stream, long offset, int whence);
(3)函数功能
设置文件的位置指针。
(4)所属头文件
#include<stdio.h>
(5)返回值
成功:0
失败:-1
(6)参数说明
stream:指向的文件
whence:表示指针的开始位置,只能取下面的三种值。
SEEK_SET文件的开头加上offset(正的)
SEEK_CUR当前的指针加上offset(可正可负)的位置
SEEK_END从文件的末尾加上offset(负的)
offset:指针将要加的数。
(7)范例程序
#include<stdio.h>
void main()
{
FILE *fd;
char *c_buf = "987654321";
fd = fopen("/home/test.txt","r+");
fseek(fd,8,SEEK_SET);
fwrite(c_buf,5,1,fd);
fclose(fd);
}
转载于:https://www.cnblogs.com/free-1122/p/11345087.html
第三季-第9课-库函数方式文件编程相关推荐
- LS9-库函数方式文件编程之学习笔记
库函数调用方式文件编程 定义/功能: 通过通用函数库,增强程序的可移植性. 文件指针(FILL*)--文件描述符 1. 打开文件 1.1 函数名(功能+UNIX环境高级编程手册) fopen 1.2 ...
- [Linux系统编程]_文件编程(一)
嵌入式之路,贵在日常点滴 ---阿杰在线送代码 目录 一.系统调用 1.1 什么是系统调用 1.2 什么是库函数 1.3 将hello写入到文件1.txt流程 1.4 为什么要有缓冲区(补充) 1.5 ...
- linux库函数实现复制文件,linux应用编程笔记(6)库函数方式实现文件复制编程...
摘要:介绍了库函数文件编程常用的函数,打开,关闭,写,读,定位等,最后通过一个实例将这些函数都运用了一边,加深理解. 一.库函数文件编程常用函数 1.fopen(打开文件) 头文件 #include定 ...
- 基于标准库函数与基于HAL库函数的stm32编程方式
文章目录 基于标准库函数与基于HAL库函数的stm32编程方式 一.基于标准库 1. 介绍 2. 库函数的STM32串口程序编写 二.基于HAL库 1.介绍 2.HAL库STM32串口程序编写 三.差 ...
- 基于标准库函数与基于HAL库函数的stm32编程方式对比
基于标准库函数与基于HAL库函数的stm32编程方式对比 一.标准库函数 二.HAL库函数 三.差异 四.stdunio IDE试玩 参考资料 一.标准库函数 1.标准库的解释 标准外设库(Stand ...
- 风变编程有c语言吗,风变编程Python小课初体验:用有趣好玩的方式学编程
原标题:风变编程Python小课初体验:用有趣好玩的方式学编程 经过约一个月时间的学习,今天,我终于学完风变编程Python小课的Python基础语法课程啦!从零基础的"小白"到现 ...
- 列表怎么有限的初始化为零_《零基础学习Android开发》第五课 类与面向对象编程1-1...
视频:<零基础学习Android开发>第五课 类与面向对象编程1-1 类的定义.成员变量.构造方法.成员方法 一.从数据与逻辑相互关系审视代码 通过前面的课程,我们不断接触Java语言的知 ...
- 视频教程-Kali Linux渗透测试全程课与脚本语言编程系列课程-渗透测试
Kali Linux渗透测试全程课与脚本语言编程系列课程 本人有多年的服务器高级运维与开发经验,擅长计算机与服务器攻防及网络攻防技术!对网络安全领域有持续的关注和研究! 林晓炜 ¥899.00 立即订 ...
- 【梅哥的Ring0湿润插入教程】第一课Windows内核/驱动编程概述及应用、商业驱动保护软件原理分析...
[梅哥的Ring0湿润插入教程] Email:mlkui@163.com 转载请注明出处,谢绝喷子记者等,如引起各类不适请自觉滚J8蛋! 第一课Windows内核/驱动编程概述及应用. 商业驱动保护软 ...
- 第7章 Linux下的文件编程(一)
很久没有发文章了,这次把Linux系统下的文件编程整理了一下,太久不写的话,人会变懒的所以还是得坚持哈. Linux下的文件编程 第7章 Linux下的文件编程(一) 7.1 概述 7.1.1 Lin ...
最新文章
- java中collection方法_Java 8中的Collector toCollection()方法
- Apache Unable to find the wrapper https - did you forget to enable it when you configured PHP?
- Angular 下的 function
- 真相了!敲代码时,程序员戴耳机究竟在听什么?
- Git push 时每次都需要密码的疑惑
- Navicat 用ssh通道连接时总是报错 (报错信息:SSH:expected key exchange group packet form serve...
- Ubuntu系统下环境变量那些事儿
- 阿里业务研发经典案例:另类解法,分布式一致性
- 人工智能与机器学习学习笔记(三)
- 用户界面设计实验指导书
- ERP生产线管理系统 with WAMP
- 阿里云ASR 语音识别接口调用
- Android判断当前系统语言
- 管理员同志,回收站博文希望得到恢复,万分感谢
- 怎样修改PDF文档,PDF页面大小怎么设置
- python全栈指的是什么_python全栈指的是什么
- win10待机状态仍然联网设置
- 关于 ProgPoW:来自芯片工程师的观点
- 教师资格证笔试报名信息内部服务器错误,教师资格考试报名常见问题解决办法(2017年)...
- 【课程作业】Pygame游戏开发之三个小游戏 容易简单 附项目代码和游戏介绍
热门文章
- 实习成长之路——设计模式四:如何做到“对扩展开放、修改关闭”?扩展和修改各指什么?
- mysql 廖雪峰_讨论 - 廖雪峰的官方网站
- Flink on YARN(上):一张图轻松掌握基础架构与启动流程
- BerryBoot实现树莓派多系统切换
- Android Multimedia框架总结(十二)CodeC部分之OMXCodec与OMX事件回调流程
- python脚本读书心得_《利用Python进行数据分析》读书笔记(一)Python Basic
- 怎么发文件到服务器异常,大神帮我看看,我用async-http框架上传文件到服务器发生异常...
- 2017年c语言试卷及答案,2017年全国计算机c语言试题及答案
- Android11新版本,一加8系列喜提Android11稳定版更新
- python 文件上传 web_Python WebDriver 文件上传(一)