标准IO开发

前面分析的文件IO编程都是基于文件描述符的。这些都是基本的IO控制,是不带缓存的。

这里要讨论的IO操作是基于流缓冲的,它是符合ANSIC的标准IO处理。

标准IO提供流缓冲的目的是尽可能减少使用read和write调用的数量。标准IO提供了3种

类型的缓冲存储。

.全缓冲:当填满标准IO缓存后才进行实际IO操作。

.行缓冲:当在输入和输出中遇到新行符时,标准IO库执行IO操作。

.不带缓冲:标准IO库不对字符进行缓冲。如果用标准IO函数写若干字符到不带缓冲的流中,

则相当于用write系统函数将这些字符写全相比较的打开文件上。

1.fopen

#include

main()

{

FILE *fp;

int c;

if((fp=fopen("exist","w"))!=NULL)

{

printf("open success !");

}

fclose(fp);

}

/*----------------------------------------

notes:

1.fopen说明

打开文件有三个标准,分别为:fopen,fdopen和freopen.它们可以以不同的模式打开,

但都返回一个指向FILE的指针,该指针以将对应的IO流相绑定.此后,对文件的读写

都是通过这个FILE指针来进行.

2.fopen函数语法:

1)所需的头文件 #include2)函数原型:FILE *fopen(const char *path,const char *mode)

3)入口参数

path:包含要打开的文件路径及文件名

mode:文件打开状态

4)返回值

成功:指向FILE的指针

失败:NULL

3.mode 取值说明

r或rb                 打开只读文件,该文件必须存在

r+或r+b               打开可读写的文件,该文件必须存在

w或wb                 打开只写文件,若文件存在则文件长度清为0,即会擦除文件以前的

内容.若文件不存在则建立该文件

w+或w+b               打开可读写文件,若文件存在则文件长度清为0,即会擦除文件以前的

内容.若文件不存在则建立该文件

a或ab                 以附加的方式打开只写文件.若文件不存在,则会建立该文件;如果文件

存在,写入的数据会被加到文件尾,即文件原先的内容会被保留

a+或a+b               以附加方式打开可读写的文件.若文件不存在,则会建立该文件;如果文件

存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留.

4.在每个选项中加入b字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件.不过在linux

系统中会自动识别不同类型的文件而将此符号忽略.

--------------------------------------------*/

2.fwrite

#include

int main()

{

FILE *stream;

unsigned char i,nmemb=3;

char s[3]={'a','b','c'};

stream=fopen("what","w");

i=fwrite(s,sizeof(char),nmemb,stream);

printf("i=%d",i);

fclose(stream);

}

/*---------------------------------

notes:

1.fwrite函数是用于对指定的文件流进行写操作.

2.fwrite函数格式

1)所需头文件:#include2)函数原型 size_t fwrite(const void *ptr,size_t size,size_t nnmemb,FILE *stream)

3)入口参数

ptr:存放写入记录的缓冲区

size:写入的记录大小

nmemb:写入的记录数

stream:要写入的文件流

4)函数返回值:

成功:返回实际写入到的nmemb数目

失败:EOF

---------------------------------------*/

3.fput

#includemain()

{

int c;

fputc(fgetc(stdin),stdout);

}

/*-----------------------------------------

文件在打开之后,根据一次读写文件中字符的数目可分为字符输入输出,行输入输出和

格式化输入输出.

一.字符输入输出

字符输入输出函数一次仅读写一个字符.

1.字符输出函数语法要点:

1)需头文件           #include2)函数原型

int getc(FILE *stream)

int fgetc(FILE *stream)

int getchar(void)

3)入口参数:

stream:要输入的文件流

4)函数返回值:

成功:下一个字符

失败:EOF

2.字符输入函数语法要点:

1)需头文件             #include2)函数原型

int putc(int c,FILE *stream)

int fputc(int c,FILE *stream)

int putchar(int c)

3)函数返回值

成功:字符c

失败:EOF

二.行输入输出

1.行输出函数语法要点

1)需头文件 #include2)函数原型

char *gets(char *s)

char fgets(char *s,int size,FILE *stream)

3)函数入口参数

s:要输入的字符串

size:输入的字符串长度

stream:对应的文件流

4)函数返回值

成功:s

失败:NULL

2.行输入函数语法要点

1)需头文件 #include2)函数原型

int puts(const char *s)

int fputs(const char *s, FILE *stream)

3)函数入口参数

s:要输出的字符串

stream:对应的文件流

4)函数返回值:

成功:s

失败:NULL

三:格式化输入输出

1.格式化输出函数1

1)需头文件  #include2)函数原型

int printf(const char *format,......)

int fprintf(FILE *fp,const char *format,......)

int sprintf(char *buf,const char *format,......)

3)函数入口参数

format:记录输出格式

fp:文件描述符

buf:记录输出缓冲区

4)函数返回值

成功:输出字符数(sprintf返回存入数组中的字符数)

失败:NULL

2.格式化输出函数2

1)需头文件

#include#include2)函数原型

int vprintf(const char *format,va_list arg)

int vfprintf(FILE *fp,const char *format,va_list arg)

int vsprintf(char *buf,const char *format,va_list arg)

3)函数入口参数

format:记录输出格式

fd:文件描述符

arg:相关命令参数

4)函数返回值

成功:存入数组的字符数

失败:NULL

3.格式化输入函数

1)需要的头文件

#include2)函数原型

int scanf(const char *format,......)

int fscanf(FILE *fp,const char *format,......)

int sscanf(char *buf,const char *format,......)

3)函数入口参数

format:记录输出格式

fp:文件描述符

buf:记录输入缓冲区

4)函数返回值

成功:输出字符数(sprintf返回存入数组中的字符数)

失败:NULL

----------------------------------------------*/

linux 带缓存的fwrite,文件IO编程之(六):基于流缓冲 fopen,fwrite,fput相关推荐

  1. 2.Linux文件IO编程

    2.1Linux文件IO概述 2.1.0POSIX规范 POSIX:(Portable Operating System Interface)可移植操作系统接口规范. 由IEEE制定,是为了提高UNI ...

  2. 文件IO编程之学习总结

    目录 一.多文件编程 二.⽬录(⽂件)操作 1.创建⽬录mkdir 2.删除⽬录rmdir 3.打开⽬录⽂件 4.获取打开⽬录中的⽂件readdir 5.关闭打开的⽬录⽂件closedir 6.字符串 ...

  3. CUDA编程第六章: 流和并发

    本章内容: 理解流和事件的本质 理解网格级并发 重叠内核执行和数据传输 重叠CPU和GPU执行 理解同步机制 避免不必要的同步 调整流的优先级 注册设备回调函数 通过NVIDIA可视化性能分析器显示应 ...

  4. 嵌入式Linux基础学习笔记-文件IO编程-I/O多路复用

    实验内容:多路复用-I/O操作及阻塞 编程实现文件描述符集合的监听 multiplex_poll.c文件编写: /* multiplex_poll.c */ #include <fcntl.h& ...

  5. 嵌入式Linux基础学习笔记-文件IO编程-文件锁(2)

    文件操作仿真FIFO,实现生产者-消费者运行模型 编程实现生产者程序producer.c,创建仿真FIFO结构文件(普通文件),按照给定的时间间隔向FIFO文件写入自动生成的字符(自定义),生产周期及 ...

  6. 嵌入式Linux基础学习笔记-文件IO编程-文件锁(1)

    文件锁-文件共享 共享资源竞争问题的解决方法:文件锁. 文件锁包括 建议性锁 要求每个上锁文件的进程都要检查是否有锁存在,并且尊重 已有的锁 强制性锁 由内核执行的锁,当一个文件被上锁进行写入操作的时 ...

  7. java io 缓存读取_Java 文件IO写入读取四种方法

    第一种:字节流 FileInputStream  FileOutputStream 1.1 读取操作 //先创建一个和硬盘连接的流(打通硬盘和内存的通道) FileInputStream fis = ...

  8. Linux学习之路4——文件IO打开、创建、读写操作

    1.使用man 2 open.man 2 creat.man 2 write.man 2 read命令获取头文件 语法: int open(const char *pathname, int flag ...

  9. 用标准IO fgetc和fputc,fread和fwrite,文件IO read和write实现CP复制

    1.用标准IOfgetc和fputc实现CP复制普通文件 2.用标准IOfread和fwrite实现CP复制文件,照片 3.用文件IOread和write实现CP复制文件,照片 帮助理解使用fgetc ...

最新文章

  1. java面试的基本问题_java面试常见基础问题之一
  2. 爱上经典之《蜗牛与黄鹂鸟》
  3. 数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型...
  4. Linux线上环境部署zabbix,CentOS 7.3下Zabbix 4.0监控环境安装部署
  5. Sequence Classification with LSTM Recurrent Neural Networks in Python with Keras-学习笔记
  6. Linux允许61440端口,释放对某端口的占用
  7. 面试题,如何改进一款产品
  8. python中的内置函数返回元素_Python内置函数_________用来返回数值型序列中所有元素之和。...
  9. DNS寻址以及IP解析
  10. ChinaITLab-Linux工程师培训课程笔记5
  11. 多国语言点阵字库合并!!!
  12. 基于vue+html的Web网页音乐播放器设计
  13. 君不密则失臣,臣不密则失身,机事不密则害成
  14. 数据导入与预处理实验一---KETTLE数据处理
  15. 英语中的逻辑思维真奇妙
  16. Raki的读paper小记:Prompting ELECTRA: Few-Shot Learning with Discriminative Pre-Trained Models
  17. 谷歌白帽SEO技术让你的搜索流量暴涨
  18. Chart.js-柱状图分析(参数分析+例图)
  19. DirectX12_入门之三角形
  20. 以色列《耶路撒冷之鸽》凄美感人别具特色

热门文章

  1. Android主题换肤实现
  2. Windows Terminal完整指南
  3. Java加密与解密的艺术~RSA模型分析
  4. C++学习之路 | PTA乙级—— 1016 部分A+B (15分)(精简)
  5. SHA384-算法解密
  6. Modbus协议栈开发笔记之三:Modbus TCP Server开发
  7. 短信微信等消息发送系统的架构设计
  8. XCode的控制台调试命令
  9. verilog异步复位jk触发器_Verilog专题(九)DFF、Dlatch、JK flipflop
  10. 软件工程讲义 9 创新的出路 走进作坊