linux 带缓存的fwrite,文件IO编程之(六):基于流缓冲 fopen,fwrite,fput
标准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相关推荐
- 2.Linux文件IO编程
2.1Linux文件IO概述 2.1.0POSIX规范 POSIX:(Portable Operating System Interface)可移植操作系统接口规范. 由IEEE制定,是为了提高UNI ...
- 文件IO编程之学习总结
目录 一.多文件编程 二.⽬录(⽂件)操作 1.创建⽬录mkdir 2.删除⽬录rmdir 3.打开⽬录⽂件 4.获取打开⽬录中的⽂件readdir 5.关闭打开的⽬录⽂件closedir 6.字符串 ...
- CUDA编程第六章: 流和并发
本章内容: 理解流和事件的本质 理解网格级并发 重叠内核执行和数据传输 重叠CPU和GPU执行 理解同步机制 避免不必要的同步 调整流的优先级 注册设备回调函数 通过NVIDIA可视化性能分析器显示应 ...
- 嵌入式Linux基础学习笔记-文件IO编程-I/O多路复用
实验内容:多路复用-I/O操作及阻塞 编程实现文件描述符集合的监听 multiplex_poll.c文件编写: /* multiplex_poll.c */ #include <fcntl.h& ...
- 嵌入式Linux基础学习笔记-文件IO编程-文件锁(2)
文件操作仿真FIFO,实现生产者-消费者运行模型 编程实现生产者程序producer.c,创建仿真FIFO结构文件(普通文件),按照给定的时间间隔向FIFO文件写入自动生成的字符(自定义),生产周期及 ...
- 嵌入式Linux基础学习笔记-文件IO编程-文件锁(1)
文件锁-文件共享 共享资源竞争问题的解决方法:文件锁. 文件锁包括 建议性锁 要求每个上锁文件的进程都要检查是否有锁存在,并且尊重 已有的锁 强制性锁 由内核执行的锁,当一个文件被上锁进行写入操作的时 ...
- java io 缓存读取_Java 文件IO写入读取四种方法
第一种:字节流 FileInputStream FileOutputStream 1.1 读取操作 //先创建一个和硬盘连接的流(打通硬盘和内存的通道) FileInputStream fis = ...
- Linux学习之路4——文件IO打开、创建、读写操作
1.使用man 2 open.man 2 creat.man 2 write.man 2 read命令获取头文件 语法: int open(const char *pathname, int flag ...
- 用标准IO fgetc和fputc,fread和fwrite,文件IO read和write实现CP复制
1.用标准IOfgetc和fputc实现CP复制普通文件 2.用标准IOfread和fwrite实现CP复制文件,照片 3.用文件IOread和write实现CP复制文件,照片 帮助理解使用fgetc ...
最新文章
- java面试的基本问题_java面试常见基础问题之一
- 爱上经典之《蜗牛与黄鹂鸟》
- 数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型...
- Linux线上环境部署zabbix,CentOS 7.3下Zabbix 4.0监控环境安装部署
- Sequence Classification with LSTM Recurrent Neural Networks in Python with Keras-学习笔记
- Linux允许61440端口,释放对某端口的占用
- 面试题,如何改进一款产品
- python中的内置函数返回元素_Python内置函数_________用来返回数值型序列中所有元素之和。...
- DNS寻址以及IP解析
- ChinaITLab-Linux工程师培训课程笔记5
- 多国语言点阵字库合并!!!
- 基于vue+html的Web网页音乐播放器设计
- 君不密则失臣,臣不密则失身,机事不密则害成
- 数据导入与预处理实验一---KETTLE数据处理
- 英语中的逻辑思维真奇妙
- Raki的读paper小记:Prompting ELECTRA: Few-Shot Learning with Discriminative Pre-Trained Models
- 谷歌白帽SEO技术让你的搜索流量暴涨
- Chart.js-柱状图分析(参数分析+例图)
- DirectX12_入门之三角形
- 以色列《耶路撒冷之鸽》凄美感人别具特色