标准库IO接口:

一般程序运行起来,自动默认打开 标准输入文件  fd=0(scanf),标准输出文件  fd=1(printf),  标准错误文件  fd=2

  • fopen   打开文件

FILE* fopen(带路径的文件名,打开方式:"r  r+  w  w+  a  a+  b")

r:只读 若文件不存在报错返回

r+:可读可写  若文件不存在报错返回

w:只写,若文件不存在则创建,若文件存在,清空文件原有内容

w+:可读可写,若文件不存在则创建,若文件存在,清空文件原有内容

a:追加只写  每次写入数据追加到文件末尾,若文件不存在则创建

a+:可读  或 追加写入  每次写入数据追加到文件末尾,若文件不存在则创建

b:对文件数据进行原始二进制操作

返回值:成功:返回操作句柄:FILE*文件流指针     失败:返回NULL

  • fwrite   写文件

size_t fwrite(写入文件数据(const void*ptr),size(块大小),nmemb(块个数)文件流指针)

块大小*块个数=写入总长度

返回值:完整写入文件的块个数  失败返回0

  • fread   读文件

size_t fread(读取到数据的缓冲区地址(void*ptr),size(块大小),nmemb(块个数),文件流指针)

块大小*块个数=读取总长度

返回值:完整读取文件的块个数  设置块大小为长度  块个数为1  但不确定是否读入  可以设置块大小为1  快个数为一个数  根据返回块个数可以确定是否数据有读入    失败返回0或者读取到文件末尾也返回0

  • fseek   跳转文件读写位置

int fseek(文件流指针,偏移量,偏移的相对起始位置(SEEK_SET:起始位置;SEEK_CUR:当前位置  SEEK_END:末尾))

成功返回0   错误返回-1

  • fclose   关闭文件

代码演示

结果演示:

系统调用IO接口:

  • open 打开文件

int open(文件路径名,标志位(类似于打开方式),文件权限)

标志位:必选项:O_RDONLY,O_WRONLY,O_RDWR

可选项:O_CREAT:如果文件不存在则创建

O_EXCL:如果文件已经存则报错返回

O_TRUNC:打开文件时截断文件长度为0   即清空内容

O_APPEND:将写入设置为追加写

使用过程中  将几个标志位通过‘|’(或操作)连接使用

文件权限前面要加0   如 0777   如果使用了O_CREAT就必须要指定文件权限  注意:此处会受到系统umask掩码影响   给定权限mode&~umask为实际权限

解决方法:在#include<sys/stat.h>调用umask(0)函数   设置当前程序掩码为0

返回值:成功返回非负数(操作句柄)      失败返回-1

  • write

size_t write(open返回的操作句柄,要写入的数据缓存区buf,要写入的数据长度)

返回值:成功返回实际写入文件数据的长度    失败返回-1

  • read

size_t read(open返回的操作句柄,读取到数据缓冲区buf,要读取的数据长度)

返回值:成功返回实际读取到的数据的长度    失败返回-1

  • lseek

off_t fseek(open返回的操作句柄,偏移量,偏移的相对起始位置(SEEK_SET:起始位置;SEEK_CUR:当前位置  SEEK_END:末尾))

返回值:跳转后的位置相对于起始位置的偏移量(设置文件末尾  用于获取文件长度)   错误返回-1

  • close

int close(open返回的操作句柄)

代码示例:

结果演示:

综上所述:库函数IO与系统调用IO功能类似,为什么还要对系统调用接口进行封装呢?

首先要理解open返回的操作句柄   即文件描述符--一个非负数  是如何描述一个具体文件呢?

文件描述符  为系统内核中进程所打开的文件描述信息表中的下标索引

文件描述符分配原则:在file_struct数组中,找到未被使用的最小下标,作为新的文件描述符

标准输入文件  fd=0(scanf),标准输出文件  fd=1(printf),  标准错误文件  fd=2

引入重定向概念:通过改变文件描述符下标位置所保存的文件描述信息,进而改变这个描述符所操作的文件,改变数据的流向

int dup2(int oldfd,int newfd)将newfd重定向到oldfd

文件流指针就是一个FILE*结构体指针,结构体中包含一个成员变量就是文件描述符

具体原理参照下图

库函数io与系统调用IO区别:

缓冲区:即换行刷新缓存区  是文件流指针所有的,对于文件描述符或系统调用来说是没有的

文件流指针的缓冲区被称之为:用户态缓冲区(内核空间+用户空间  一般所开辟的内存空间都在用户空间中)

标准库IO与系统调用IO区别与联系相关推荐

  1. c运行库、c标准库、windows API的区别和联系

    c运行库.c标准库.windows API的区别和联系 C运行时库函数 C运行时库函数是指C语言本身支持的一些基本函数,通常是汇编直接实现的.    API函数 API函数是操作系统为方便用户设计应用 ...

  2. C++ Primer 5th笔记(chap 17 标准库特殊设施)IO库 之操纵符

    1. 控制浮点数格式 可以控制浮点数输出三个种格式 • 以多高精度( 多少个数字) 打印浮点值 • 数值是打印为十六进制. 定点十进制还是科学记数法形式 • 对于没有小数部分的浮点值是否打印小数点 1 ...

  3. linux下c标准库位置,C 标准库 IO 使用详解

    其实输入与输出对于不管什么系统的设计都是异常重要的,比如设计 C 接口函数,首先要设计好输入参数.输出参数和返回值,接下来才能开始设计具体的实现过程.C 语言标准库提供的接口功能很有限,不像 Pyth ...

  4. C++prime读书笔记(二)C++标准库:IO、容器、泛型算法、动态内存

    layout: post title: C++prime读书笔记(二)C++标准库:IO.容器.泛型算法.动态内存 description: C++prime读书笔记(二)C++标准库:IO.容器.泛 ...

  5. 标准IO与系统IO的区别

     1.系统IO操作文件时是无缓冲输入,一般用于操作字符设备文件(LCD, LED, BEEP ...,数据需要实时刷新) 标准IO操作文件时是有缓冲输入,一般用于操作普通文件(.txt, .jpg.. ...

  6. C++ Primer 5th笔记(chap 17 标准库特殊设施)多字节低层IO操作

    1. 多字节操作 一些未格式化 IO 操作一次处理大块数据,这些操作要求我们自己分配并管理用来保存和提取数据的字符数组 操作 解释 is.get(sink, size, delim) 从is中读取最多 ...

  7. Go 标准库: io

    原文链接 http://ironxu.com/772 本文介绍Go 标准库 io 常用的导出函数,结构体和方法. io 包提供了对 I/O 原语的基本接口,这些接口抽象出了泛用的函数并附加了一些操作. ...

  8. Python标准库中的io

    Python标准库中io模块中有两个比较重要的组成部分:StringIO.BytesIO 1.StringIO StringIO 的作用是在内存中读写字符串,其示例代码如下: from io impo ...

  9. C++知识点15——使用C++标准库(IO流)

    1.IO类就是负责输入输出的类,包括输入输出到文件,字符串以及控制台 常用的IO类和所在头文件如下 #include <iostream> istream //从流中读取数据 ostrea ...

最新文章

  1. 虚拟机和java虚拟机
  2. php53 php55区别,详解 PHP 中的三大经典模式
  3. 分区表PARTITION table
  4. java web启动socket_javaweb启动时启动socket服务端代码实现
  5. 「动手学深度学习」在B站火到没谁,加这个免费实操平台,妥妥天花板
  6. bash快捷键(防忘)
  7. oracle 10g的安装配置
  8. require smarty.class.php 报错,Smarty 报错
  9. iphone震动反馈怎么设置_苹果魅族都在用的震动反馈 到底是怎样实现的?
  10. 利用MPU6050 + OLED屏显示3D矩形效果
  11. postgres汉字转换为拼音
  12. JDK8 Instant类的使用和LocalDate,LocalTime 和 LocalDateTime的介绍。
  13. 云课堂软件工程(C编码实践篇)学习之我见
  14. QT教程 休闲棋牌游戏开发(2)
  15. Android系统定时开关机实现简述
  16. Git简介、安装教程附安装包
  17. 设计模式之工厂方法模式(Factory Method)
  18. RapidScada免费开源Scada组态软件系列教程7-Linux下系统的运行
  19. 如何用vue做一个二级联动
  20. 名帖03 李阳冰 篆书《谦卦碑》

热门文章

  1. 遥感计算机解释技术PPT,第六章遥感数字图像计算机解译ppt课件.ppt
  2. 6款超实用资源网站,找图、办公、学习都满足你
  3. python教程 网易公开课_如何用Python抓取网易公开课的视频?
  4. 计算机专业英语作业1,计算机专业英语作业(1)
  5. 如何使用svn导出项目
  6. 准考证打印系统关闭怎么办_准考证打印系统关闭怎么办_公务员考录专题网站...
  7. JQuery蒙板层(特效)
  8. 2019年Java程序员金三银四跳槽季,机会只留给有准备的人!
  9. 速记java八大基本数据类型
  10. 2018年最佳设计规范20例免费下载