库函数系统调用文件方式

  基于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. Expression Add Operators

    Given a string that contains only digits 0-9 and a target value, return all possibilities to add bin ...

  2. Unity3D研究院之Prefab里面的Prefab关联问题(转)

    转自http://www.xuanyusong.com/archives/3042 最近在做UI部分中遇到了这样的问题,就是Prefab里面预制了Prefab.可是在Unity里面一旦Prefab预制 ...

  3. zpf 获取表单等数据的用法

    2015年4月12日 12:25:35 星期日 zpf框架中获取表单数据的方法 //获得get,post,url中的数据 private function setData() { $this-> ...

  4. 数据结构——B树、B+树

    B树和B+树主要应用于外排序,对于外排序,从硬盘读取的时间要远远大于遍历树的时间,因此要想办法减少从硬盘读取的时间. B树(有时也叫B-树) M阶B树定义如下: 是一种多路搜索树(并不是二叉的):1. ...

  5. centos6.5Xen4.2安装

    官方安装文档:http://xen.crc.id.au/support/guides/install/ 一.环境说明 1. 本文采用CentOS6.5 x64,安装开发包及开发工具. 2. 关闭sel ...

  6. Effective C++ -----条款27:尽量少做转型动作

    如果可以,尽量避免转型,特别是在注重效率的代码中避免dynamic_casts.如果有个设计需要转型动作,试着发展无需转型的替代设计. 如果转型是必要的,试着将它隐藏于某个函数背后.客户随后可以调用该 ...

  7. HDU 1000 & HDU1001 & 字符串连接

    A + B Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  8. nginx配置负载

    一.系统优化 1.修改/etc/sysctl.conf,优化tcp连接数 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 120 ...

  9. 回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。

    问题补充: “/Source”应用程序中的服务器错误. 回发或回调参数无效.在配置中使用 <pages enableEventValidation="true"/> 或 ...

  10. 1.5 STL中大小相等的概念

    1) 2)