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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vba 提取 json某个值_利用VBA字典,提取两列数据的重复值

大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第52讲:利用字典,提取两列数据重复值。有人讲:字典是VBA中最为精华的部分,持这种观点的人肯定有自己的道理,确实,利用字典可以给我的代码带来很大的方便之处,今日我讲解的是…

Linux中存储相关的命令,Linux存储管理命令与HAB相关命令

首先了解Linux中的设备命名规则:在安装和使用Linux的过程中,您必然会接触到不少像hda1、ttyS0、eth0这样的设备名称。在Linux中,每个设备必须在它的驱动程序控制下运行,驱动程序则与/dev目录下的特殊文件联系在一起,尽…

红外倒车雷达原理图_硅光电倍增管 (SiPM) 直接飞行时间 (dToF) 激光雷达平台为工业测距应用提供现成的设计...

点击蓝字关注我们请私信我们添加白名单如果您喜欢本篇文章,欢迎转载!推动高能效创新的安森美半导体 (ON Semiconductor,美国纳斯达克上市代号:ON),推出了由该公司硅光电倍增管 (SiPM) 技术实现的单点直接飞行时间 (dTo…

linux中nslookup命令功能,nslookup

a,最简单的方法[rootrudder ~]# nslookup baidu.comServer: 8.8.8.8Address: 8.8.8.8#53Non-authoritative answer:Name: baidu.comAddress: 123.125.114.144Name: baidu.comAddress: 220.181.111.85Name: baidu.comAddress: 220.181.111.86nslookup,交互方式&#…

用c语言求最大公约数的流程图,如何用c语言求最大公约数和最小公倍数

ag_cd(m,n);if (m>n) //最小公倍数较大的数*(较小的数/最大公约数){bn;b/a;return m*b;}else{bm;b/a;return n*b;}}main(){int p,r,n,m,temp;printf("Please enter 2 numbers n,m:");scanf("%d,%d",&n,&m);//输入两个正整数.if(n在m中.{tempn;n…

visio图标_弱电间机柜原型图整理,可编辑!(Excel,visio,CAD)

有朋友问到机柜原型图,这个我们在弱电vip技术群里面也有朋友提到过,今天我们就整理了弱电系统中常用的机柜原型图,有Excel,visio,CAD版本,可以修改编辑!1、Excel机柜原型图(可编辑)机柜布局-1机…

c语言字节强制对齐,C语言的那些小秘密之字节对齐

为了让读者加深印象,我们这里在代码中没有使用0,而是使用的4,所以在最终计算出的结果部分减去了一个4才是偏移地址,当然实际使用中我们都是用的是0。懂了上面的宏offsetof之后我们再来看看下面的代码:#include #define…

xshell 6 连接debian系统拒绝了密码_原来连接Linux,还有这个方法

你是不是以为电脑的操作系统只有Windows和IOS系统,其实不是的,还有一个Linux系统,这个系统不是很常见,导致很多人连怎么连接Linux系统都不太清楚明白。Windows系统可以用远程桌面,Linux系统怎么来远程桌面呢&#xff1…

ctf up怎么写 write_软件测试工程师要不要写工具?

Fintech概念正受到不少互联网金融公司的热捧,主要是指代那些可用于撕裂传统金融服务方式的高新技术。越来越多的企业开辟了新的部门去研究各种各样能让自己产品增值的科技类产品。尤其是在很多互联网金融公司,业务分析师BA(Business Analyst)&#xff0c…

c语言时间错误的是什么意思,C语言中,如何验证输入日期的正确性!~

就这么写的&#xff0c;没调试&#xff0c;你自己调一下#include<stdio.h>voidmain(){intyear,month,date;scanf("%d-%d-%d",&year,&month,&date);printf("%d-%d-%d",year,month,date);if(year<0||year>3000)printf("Error!&…

c语言中数据存储在文件中,急求如何将下列C语言程序数据存储到文件中?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼求如何改动才能将下列程序的存储输入或输出数据(或两者一起)到指定的文件(或运行时直接创立一个文件)如Arrangement中。#include int n0;int rest[7][7]; //全局声明,以供全局调用int main(){void perm(int list[],int ,int );int …

th标签能包裹select吗_电影《八佰》过后,他能摘掉马思纯前男友标签了吗?

文/温青青提到欧豪&#xff0c;大多数人第一时间想到的还是“马思纯前男友”、“快乐男声选秀出道歌手”这些身份。原因嘛很简单&#xff0c;只因为男方在娱乐圈的名气地位暂时还不如女方。类似情况分手的情侣还有很多&#xff0c;杨紫的前男友秦俊杰&#xff0c;蓝盈莹的前男友…

c语言 浮点数误差,[扫盲]为什么浮点数运算会有误差

在开始阅读本文之前&#xff0c;请猜测一下下面程序的输出结果&#xff1a;float a0.0f;for(int i0;i<10;i){a0.1;}cout<true? Youre too young, too simple, sometimes naive.虽然乍看上去很不可思议&#xff0c;但是0.1叠加10遍的确是和1.0不等的。这种诡异的情况是由…

h3c防火墙u200配置命令_h3c 防火墙清除配置

reset saved-configuration 重置配置文件。The saved configuration file will be erased. Are you sure? [Y/N]:YConfiguration file in cfa0 is being cleared. Please wait ...Configuration file is cleared.reboot 重新防火墙Start to check configuration with next sta…

c语言库快速幂函数,C语言 - 快速幂 - 迭代法+递归法 - 详细讲解

快速幂的作用&#xff1a;解决 求 a ^ n 的问题 (n可以大于1e18)&#xff0c; 如果用for循环的话&#xff0c;毫无疑问直接炸掉 …… 所以也就用了算法复杂度在 o(log n)的快速幂算法来解决此类问题。快速幂递归法(基于二分思想)&#xff1a;那么既然要用到二分法那么怎么二分&…

python virtualenv_python开发之virtualenv与virtualenvwrapper讲解

在使用 Python 开发的过程中&#xff0c;工程一多&#xff0c;难免会碰到不同的工程依赖不同版本的库的问题&#xff1b;亦或者是在开发过程中不想让物理环境里充斥各种各样的库&#xff0c;引发未来的依赖灾难。此时&#xff0c;我们需要对于不同的工程使用不同的虚拟环境来保…

android 自定义 popupwindow,Android自定义弹出窗口PopupWindow使用技巧

PopupWindow是Android上自定义弹出窗口&#xff0c;使用起来很方便。PopupWindow的构造函数为public PopupWindow(View contentView, int width, int height, boolean focusable)contentView为要显示的view&#xff0c;width和height为宽和高&#xff0c;值为像素值&#xff0c…

python花萼长度表_python描述性统计实践

1、加载相关库和数据集使用的库主要有&#xff1a;pandas、numpy、sklearn、matplotlib、seaborn使用的数据集&#xff1a;sklearn库中的鸢尾花数据集import pandas as pdimport numpy as npfrom sklearn.datasets import load_irisimport matplotlib.pyplot as pltimport seab…

android lottie字体json,Android 动画深入Lottie

image.png如果现在有需求,让这个小人做出拳击动作你应该如何做? 传统方法会写一大堆的路径值做路径动画&#xff0c;不好调试代码臃肿并且麻烦&#xff0c;那么有简单方法吗 有&#xff01; SVG 和 Lottie 可以胜任 SVG编辑麻烦美工不太会弄&#xff0c;那么我们用Lottie 下面…

android 搜索工具栏,Android记事本在菜单栏添加搜索按钮方法

效果图这个app结构和我之前将记事本开发的博客基本一致&#xff0c;我这里直接讲一下怎样添加使用的开发软件为android studio首先在res目录下新建文件夹menu&#xff0c;添加目录布局文件main_menu之后在main_menu中添加如下代码xmlns:app"http://schemas.android.com/ap…