第9课-库函数方式文件编程

9.1 核心理论

1. 函数库

基于C语言函数库的文件编辑是独立于具体操作系统平台的,不管是windows、linux还是其他的操作系统,都是使用这些函数。使用库函数进行函数程序设计可以提高函数的可移植性。

对于标准的C函数库,它们的操作都是围绕流来进行的。流是一个抽象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。

  1. 文件指针

在系统调用方式实现的文件访问中,使用文件描述符(一个整数)来指向一个文件。在库函数方式的文件访问中,使用FILE类型来表示一个打开的文件,这个类型中包含了管理文件流的信息。而指向件,这个类型中包含了管理文件流的信息。而指向该类型的指针FILE* 则被称之为文件指针。

它和文件描述符的作用是一样的。

9.2 函数学习

学习方法:三不学习法。

先在《UNIX环境高级编程》中找到相关的命令;通过man命令查看函数入队用法和原型等信息;手把手写代码。

  1. 打开文件

(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. 关闭文件

(1)函数名

fclose

(2)函数原形

int fclose(FILE *fp);

(3)函数功能

关闭文件

(4)所属头文件

#include<stdio.h>

(5)返回值

成功:0

失败:EOF

(6)参数说明

fp:待关闭的文件指针

  1. 读文件

(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. 写文件

(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. 文件定位

每一个打开的文件都有一个隐形的指针。

(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课-库函数方式文件编程相关推荐

  1. LS9-库函数方式文件编程之学习笔记

    库函数调用方式文件编程 定义/功能: 通过通用函数库,增强程序的可移植性. 文件指针(FILL*)--文件描述符 1. 打开文件 1.1 函数名(功能+UNIX环境高级编程手册) fopen 1.2 ...

  2. [Linux系统编程]_文件编程(一)

    嵌入式之路,贵在日常点滴 ---阿杰在线送代码 目录 一.系统调用 1.1 什么是系统调用 1.2 什么是库函数 1.3 将hello写入到文件1.txt流程 1.4 为什么要有缓冲区(补充) 1.5 ...

  3. linux库函数实现复制文件,linux应用编程笔记(6)库函数方式实现文件复制编程...

    摘要:介绍了库函数文件编程常用的函数,打开,关闭,写,读,定位等,最后通过一个实例将这些函数都运用了一边,加深理解. 一.库函数文件编程常用函数 1.fopen(打开文件) 头文件 #include定 ...

  4. 基于标准库函数与基于HAL库函数的stm32编程方式

    文章目录 基于标准库函数与基于HAL库函数的stm32编程方式 一.基于标准库 1. 介绍 2. 库函数的STM32串口程序编写 二.基于HAL库 1.介绍 2.HAL库STM32串口程序编写 三.差 ...

  5. 基于标准库函数与基于HAL库函数的stm32编程方式对比

    基于标准库函数与基于HAL库函数的stm32编程方式对比 一.标准库函数 二.HAL库函数 三.差异 四.stdunio IDE试玩 参考资料 一.标准库函数 1.标准库的解释 标准外设库(Stand ...

  6. 风变编程有c语言吗,风变编程Python小课初体验:用有趣好玩的方式学编程

    原标题:风变编程Python小课初体验:用有趣好玩的方式学编程 经过约一个月时间的学习,今天,我终于学完风变编程Python小课的Python基础语法课程啦!从零基础的"小白"到现 ...

  7. 列表怎么有限的初始化为零_《零基础学习Android开发》第五课 类与面向对象编程1-1...

    视频:<零基础学习Android开发>第五课 类与面向对象编程1-1 类的定义.成员变量.构造方法.成员方法 一.从数据与逻辑相互关系审视代码 通过前面的课程,我们不断接触Java语言的知 ...

  8. 视频教程-Kali Linux渗透测试全程课与脚本语言编程系列课程-渗透测试

    Kali Linux渗透测试全程课与脚本语言编程系列课程 本人有多年的服务器高级运维与开发经验,擅长计算机与服务器攻防及网络攻防技术!对网络安全领域有持续的关注和研究! 林晓炜 ¥899.00 立即订 ...

  9. 【梅哥的Ring0湿润插入教程】第一课Windows内核/驱动编程概述及应用、商业驱动保护软件原理分析...

    [梅哥的Ring0湿润插入教程] Email:mlkui@163.com 转载请注明出处,谢绝喷子记者等,如引起各类不适请自觉滚J8蛋! 第一课Windows内核/驱动编程概述及应用. 商业驱动保护软 ...

  10. 第7章 Linux下的文件编程(一)

    很久没有发文章了,这次把Linux系统下的文件编程整理了一下,太久不写的话,人会变懒的所以还是得坚持哈. Linux下的文件编程 第7章 Linux下的文件编程(一) 7.1 概述 7.1.1 Lin ...

最新文章

  1. java中collection方法_Java 8中的Collector toCollection()方法
  2. Apache Unable to find the wrapper https - did you forget to enable it when you configured PHP?
  3. Angular 下的 function
  4. 真相了!敲代码时,程序员戴耳机究竟在听什么?
  5. Git push 时每次都需要密码的疑惑
  6. Navicat 用ssh通道连接时总是报错 (报错信息:SSH:expected key exchange group packet form serve...
  7. Ubuntu系统下环境变量那些事儿
  8. 阿里业务研发经典案例:另类解法,分布式一致性
  9. 人工智能与机器学习学习笔记(三)
  10. 用户界面设计实验指导书
  11. ERP生产线管理系统 with WAMP
  12. 阿里云ASR 语音识别接口调用
  13. Android判断当前系统语言
  14. 管理员同志,回收站博文希望得到恢复,万分感谢
  15. 怎样修改PDF文档,PDF页面大小怎么设置
  16. python全栈指的是什么_python全栈指的是什么
  17. win10待机状态仍然联网设置
  18. 关于 ProgPoW:来自芯片工程师的观点
  19. 教师资格证笔试报名信息内部服务器错误,教师资格考试报名常见问题解决办法(2017年)...
  20. 【课程作业】Pygame游戏开发之三个小游戏 容易简单 附项目代码和游戏介绍

热门文章

  1. 实习成长之路——设计模式四:如何做到“对扩展开放、修改关闭”?扩展和修改各指什么?
  2. mysql 廖雪峰_讨论 - 廖雪峰的官方网站
  3. Flink on YARN(上):一张图轻松掌握基础架构与启动流程
  4. BerryBoot实现树莓派多系统切换
  5. Android Multimedia框架总结(十二)CodeC部分之OMXCodec与OMX事件回调流程
  6. python脚本读书心得_《利用Python进行数据分析》读书笔记(一)Python Basic
  7. 怎么发文件到服务器异常,大神帮我看看,我用async-http框架上传文件到服务器发生异常...
  8. 2017年c语言试卷及答案,2017年全国计算机c语言试题及答案
  9. Android11新版本,一加8系列喜提Android11稳定版更新
  10. python 文件上传 web_Python WebDriver 文件上传(一)