库函数系统调用文件方式

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

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

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

一、函数学习

1.1打开文件fopen

  1.1.1 函数原形

  FILE *fopen(const char* path,const char* mode);

  1.1.2 函数功能

  打开文件

  1.1.3 所属头文件

  <stdio.h>

  1.1.4 返回值

  成功:返回文件指针

失败:NULL

  1.1.5参数说明

  path;指定打开的文件名称(包含路径)

  mode:文件打开模式

1.2关闭文件fclose

  1.2.1函数原形

  int fclose(FILE* fp);

  1.2.2 函数功能

  关闭文件

  1.2.3所属头文件

  <stdio.h>

  1.2.4返回值

  成功:0

失败 EOF

  1.2.5参数说明

  fp:待关闭文件指针

1.3读文件fread

  1.3.1函数原形

  size_t fread(void* ptr,size_t size,size_t n,FILE* stream);

  1.3.2函数功能

  fread()实现从 stream 中读取 n 个字段,每个字段为 size 个字节,并将读取的字段放入 ptr 所指的字符数组中, 返回实际已读取的字段数。在读取的字段数小于 num 时,可能是在函数调用时出现错误,也可能是读到文件的结尾。

  1.3.3所属头文件

  <stdio.h>

  1.3.4返回值

  成功:返回成功读取的数据量  失败:0

  1.3.5参数说明

  stream:指向要读取的文件

  ptr:指向读取到的 数据 要保存的位置

  size:每块的数据大小

  nmemb:读取的数据块数

1.4 写文件fwrite

  1.4.1函数原形

  size_t fwrite(const void* ptr,size_t size,size_t n,FILE* stream);

  1.4.2函数功能

  write()实现从缓冲区 ptr 所指的数组中把 n 个字段写到 stream 中,每个字段长为size 个字节,返回实际写入的字段数。

  1.4.3所属头文件

  <stdio.h>

  1.4.4返回值

  成功:成功写入数据量

失败:0

  1.4.5参数说明

  ptr:存放要写入的数据

  size:每块的数据大小

  nmemb:数据的块数

  stream:要写入数据的文件指针

1.5定位文件fseek

  1.5.1函数原形

  int fseek(FILE* stream,long offset,int whence);

  1.5.2函数功能

  设置文件位置指针

  1.5.3所属头文件

  <stdio.h>

  1.5.4返回值

  成功:返回0

失败:-1

  1.5.5参数说明

  stream:移动的文件

  offset:要移动的偏移量

  whence:确定要移动的初始位置

实例:

#include <stdio.h>
#define LENGTH 100
main()
{
FILE *fd;
char str[LENGTH]; fd = fopen("hello.txt", "w+"); /* 创建并打开文件 */
if (fd)
{
fputs("Hello World", fd); /* 写入字符串 */
fclose(fd);
} fd = fopen("hello.txt", "r");
fgets(str, LENGTH, fd); /* 读取文件内容 */
printf("%s\n", str);
fclose(fd);
}

库函数系统调用文件方式,王明学learn的更多相关文章

  1. 系统调用方式文件编程,王明学learn

    系统调用方式文件编程 一.文件描述符 在Linux系统中,所有打开的文件也对应一个数字,这个数字由系统来分配,我们称之为:文件描述符. 二.函数学习 2.1打开文件  open 2.1.2 函数原形 ...

  2. 静态/动态函数库设计,王明学learn

    静态/动态函数库设计 Linux应用程序设计中需要的外部函数主要由函数库和系统调用来提供. 两者区别: 一.函数库分类 函数库按照链接方式可分为: 1.静态链接库 对函数库的链接是放在编译时期(com ...

  3. linux设备驱动概述,王明学learn

    linux设备驱动学习-1 本章节主要学习有操作系统的设备驱动和无操作系统设备驱动的区别,以及对操作系统和设备驱动关系的认识. 一.设备驱动的作用 对设备驱动最通俗的解释就是“驱使硬件设备行动” .设 ...

  4. linux内核的组成,王明学learn

    linux内核的组成 一.linux内核源代码目录结构 arch: 包含和硬件体系结构相关的代码, 每种平台占一个相应的目录, 如 i386.ARM.PowerPC.MIPS 等. block:块设备 ...

  5. 共享内存同行,王明学learn

    共享内存同行 一.共享内存概念 共享内存是IPC机制中的一种,它允许两个不相关的进程访问同一段内存, 这是传递数据的一种非常有效的方式. 二.函数学习 这里主要有创建共享内存.映射共享内存.分离共享内 ...

  6. 信号量互斥,王明学learn

    信号量互斥 信号量(又名:信号灯)与其他进程间通信方式不大相同,主要用途是保护临界资源(进程互斥).进程可以根据它判定是否能够访问某些共享资源.除了用于访问控制外,还可用于进程同步. 一.信号量分类 ...

  7. 信号通讯编程,王明学learn

    信号通讯编程 在Linux系统中,信号(signal)同样也是最为古老的进程间通信机制. 一.信号类型 Linux系统支持的所有信号均定义在/usr/include/asm/signal.h(展示), ...

  8. 管道通信,王明学learn

    管道通信 一.通讯目的 1.数据传输 一个进程需要将数据发送给另一个进程. 2.资源共享 多个进程之间共享同样的资源. 3.通知事件 一个进程需要向另一个/组进程发送消息,通知它们发生了某事件. 4. ...

  9. 时间编程,王明学learn

    时间编程 一.时间类型 Coordinated Universal Time(UTC):世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT) Calend ...

随机推荐

  1. 【GoLang】go 微服务框架 && Web框架学习资料

    参考资料: 通过beego快速创建一个Restful风格API项目及API文档自动化:  http://www.cnblogs.com/huligong1234/p/4707282.html Go 语 ...

  2. Spring框架学习[IoC容器高级特性]

    1.通过前面4篇文章对Spring IoC容器的源码分析,我们已经基本上了解了Spring IoC容器对Bean定义资源的定位.读入和解析过程,同时也清楚了当用户通过getBean方法向IoC容器获取 ...

  3. cocos2dx 2.x实现闪电效果(贴画版)

    cocos2dx 2.x实现闪电效果(非画线版) 在网上搜索到一个直接用opengl画线实现的版本,但放在游戏中效果不太搭,要求用贴图的.我这个版本用的也是画线版的算法. 闪动的时候效果还可以,每段衔 ...

  4. linux内置的审计跟踪工具------last和lastb

    last是linux的一个内置工具,可以用来查看最后登录服务器的用户.它对于追踪非常有用. last命令显示的是来自/var/log/wtmp文件创建起,所有登录的用户.这个文件是一个二进制文件,不能 ...

  5. Windows下查看局域网内某台计算机的MAC地址

    我们知道在局域网中,在Windows下,查看局域网内其他主机的ip和对应mac地址的命令是: arp -a 这样可以看到ip和mac地址的对应关系,还是比较方便的 但是有些时候使用arp命令并不能列出 ...

  6. TokuDB 引擎安装测试

    背景: TokuDB引擎是有Tokutek开发的一个数据库存储引擎,在设计之初便引入了独特的索引算法,在其官网测试的文章中看到TokuDB性能比InnoDB高出很多. MySQL是一个插件式的数据库, ...

  7. java入门第一季2

    1. 变量:在java中,我们通过三个元素描述变量:变量类型,变量名以及变量值 注意:java中的标点符号都是英文的 2. 变量名= 首字母+其余部分 字母,+  字母 下划线,  数字 $      ...

  8. 如何用Jquery判断在键盘上敲的哪个按键

    有时候我们需要判断我们在键盘上敲了哪个键,这个需要查询下键盘上的键对应的值是多少,比如Enter键是13. 下面是Jquery代码,别忘了引用Jquery包哈. <script type=&qu ...

  9. VS工程目标文件名设置

    默认的输出文件名是$(ProjectName) 可以在项目属性-配置属性-常规-目标文件名中设置 例如我想在Debug版本的输出文件加一个后缀d,那么我可以这样设置:$(ProjectName)d

  10. C#冒泡排序

    C#最简单的冒泡排序,需要的朋友可作参考: 思路: 使用两个for循环,就可以遍历数组,这样就可以确保每个数组元素都被使用 对比前后两个数,将小的数字和大的交换位置,引入一个临时变量temp来进行交换 ...