Clibrary | 【02】文件访问fclose、fflush、fopen、freopen、setbuf、setvbuf
前言
以下是
<cstdio>
对文件访问的函数。
文章目录
- 前言
- 1、fclose
- 2、fflush
- 3、fopen
- 4、freopen
- 5、setbuf
- 6、setvbuf
1、fclose
int fclose ( FILE * stream );/*
* @func:关闭文件;
* - 与流关联的所有内部缓冲区都被解除关联并刷新:写入任何未写入输出缓冲区的内容,丢弃任何未读输入缓冲区的内容
* @param stream:指向指定要关闭的流的FILE对象的指针;
* @return:成功返回0, 失败返回EOF;
*/
案例
/*----------------------------------------------------------------------> File Name: stdioDemo.cpp> Author: Jxiepc> Mail: Jxiepc> Created Time: Mon 20 Sep 2021 04:20:08 PM CST
----------------------------------------------------------------------*/#include<iostream>
#include<unistd.h>
#include<cstring>
#include<cstdio>void myFclose(){FILE * f = fopen("file.txt", "wt");fprintf(f, "test file");fclose(f);
}
2、fflush
int fflush ( FILE * stream );/*
* @func:刷新流;
* - 若给定的流打开了写入或更新,且最后的i/o操作是一个输出操作),则会将输出缓冲区的内容都写入文件;
* - 如果stream为NULL,则所有这样的流都将被刷新;
* - 在某些实现中,为读取而刷新打开的流会导致清除其输入缓冲区;
* - 当一个文件被关闭时(调用fclose还或程序终止),与它相关的所有缓冲区都会被自动刷新。
* @param stream:指向指定缓冲流的FILE对象的指针;
* @return:成功返回0;错误返回EOF;
*/
案例
/*----------------------------------------------------------------------> File Name: stdioDemo.cpp> Author: Jxiepc> Mail: Jxiepc> Created Time: Mon 20 Sep 2021 04:20:08 PM CST
----------------------------------------------------------------------*/#include<iostream>
#include<unistd.h>
#include<cstring>
#include<cstdio>void myFflush(){char buf[1024];FILE *f = fopen("file.txt", "r+");if(f != NULL){fputs("test fflush stream", f);fflush(f);fgets(buf, 1024, f);fclose(f);}else{perror("error open"); exit(-1);}
}
3、fopen
FILE * fopen ( const char * filename, const char * mode );/*
* @func:打开的文件 ;
* @param filename:打开的文件名;
* @param mode :打开文件的模式;
* r - 读取:打开文件进行输入操作。该文件必须存在;
* w - 写入:创建空文件。若存在同名文件,则视为新的空文件;
* a - 追加:追加文件末尾,如果文件不存在,则创建该文件;
* r+ - 读取/更新:打开一个文件进行更新(用于输入和输出)。该文件必须存在;
* w+ - 写入/更新:创建空文件并打开它以进行更新(用于输入和输出)。若存在同名文件,则视为新的空文件;
* a+ - 追加/更新:打开一个文件进行更新(用于输入和输出),追加文件末尾。如果文件不存在,则创建该文件。、
* b - 若打开二进制文件,则在前面的模式加上`b`;
* @return:成功返回指向FILE对象的指针;错误返回NULL;
*
*/
案例
/*----------------------------------------------------------------------> File Name: stdioDemo.cpp> Author: Jxiepc> Mail: Jxiepc> Created Time: Mon 20 Sep 2021 04:20:08 PM CST
----------------------------------------------------------------------*/#include<iostream>
#include<unistd.h>
#include<cstring>
#include<cstdio>void myFopen(){FILE *f = fopen("file.txt", "r+");if(f != NULL){std::cout << "文件打开成功..." << std::endl;}else{perror("error open"); exit(-1);}
}
4、freopen
FILE * freopen ( const char * filename, const char * mode, FILE * stream );/*
* @func:以不同的文件或模式重新打开流 ;
* @param filename:打开的文件名;
* - 如果filename是空指针,函数将尝试更改流的模式。 尽管特定的库实现可以限制允许的更改,以及在什么情况下允许;
* @param mode :打开文件的模式;
* r - 读取:打开文件进行输入操作。该文件必须存在;
* w - 写入:创建空文件。若存在同名文件,则视为新的空文件;
* a - 追加:追加文件末尾,如果文件不存在,则创建该文件;
* r+ - 读取/更新:打开一个文件进行更新(用于输入和输出)。该文件必须存在;
* w+ - 写入/更新:创建空文件并打开它以进行更新(用于输入和输出)。若存在同名文件,则视为新的空文件;
* a+ - 追加/更新:打开一个文件进行更新(用于输入和输出),追加文件末尾。如果文件不存在,则创建该文件。、
* b - 若打开二进制文件,则在前面的模式加上`b`;
* @param stream:指向FILE对象的指针,该对象标识要重新打开的流;
* @return:成功返回stream传递的指针;错误返回NULL;
*/
案例
/*----------------------------------------------------------------------> File Name: stdioDemo.cpp> Author: Jxiepc> Mail: Jxiepc> Created Time: Mon 20 Sep 2021 04:20:08 PM CST
----------------------------------------------------------------------*/#include<iostream>
#include<unistd.h>
#include<cstring>
#include<cstdio>void myFopen(){freopen ("myfile.txt","w",stdout);printf ("This sentence is redirected to a file.");fclose (stdout);
}
5、setbuf
void setbuf ( FILE * stream, char * buffer );/*
* @func:设置流缓冲区;
* - 指定流用于I/O操作的缓冲区是完全缓冲的流;
* - 若buffer是NULL,则对流禁用缓冲,这将成为一个未缓冲的流;
* - 一旦流与打开的文件相关联,但在对该文件执行任何输入或输出操作之前,应该调用此函数;
* - 用于设置特定的内存块作为缓冲区或禁用流的缓冲
*
* @param stream:指向标识打开流的FILE对象的指针;
* @param buffer :用户分配的缓冲区,长度至少为BUFSIZ字节。或可以指定一个空指针来禁用缓存。
* @return:无;
*/
案例
/*----------------------------------------------------------------------> File Name: stdioDemo.cpp> Author: Jxiepc> Mail: Jxiepc> Created Time: Mon 20 Sep 2021 04:20:08 PM CST
----------------------------------------------------------------------*/#include<iostream>
#include<unistd.h>
#include<cstring>
#include<cstdio>void mySetbuf(){char buf[1024];FILE *p1 = fopen("file1.txt", "w");FILE *p2 = fopen("file2.txt", "a");setbuf(p1, buf);fputs("test, file1 buf", p1);fflush(p1);setbuf(p2, NULL);fputs("test file2 NULL", p2);fclose(p1);fclose(p2);
}
6、setvbuf
int setvbuf ( FILE * stream, char * buffer, int mode, size_t size );/*
* @func:更改流缓冲;
* - 为stream 指定缓冲区。该函数允许指定缓冲区的模式和大小(以字节为单位);
* - 如果缓冲区是一个空指针,该函数会自动分配一个缓冲区;
* @param stream:指向标识打开流的FILE对象的指针;
* @param buffer:用户分配的缓冲区,长度至少为size字节。或可以指定一个空指针来禁用缓存。
* @param mode:
* _IOFBF - 全缓冲:在输出时,一旦缓冲区已满(或已刷新)就会写入数据。在输入时,当请求输入操作并且缓冲区为空时填充缓冲区;
* _IOLBF - 行缓冲:在输出时,当将换行符插入到流中或缓冲区已满(或已刷新)时,都会写入数据。在输入时,当请求输入操作并且缓冲区为空时,缓冲区被填充到下一个换行符;
* _IONBF - 无缓冲:不使用缓冲。每个 I/O 操作都会尽快写入。在这种情况下,缓冲区和大小参数将被忽略;
* @param size:缓冲区大小,以字节为单位。若缓冲区参数是空指针,则该值可以确定函数为缓冲区自动分配的大小;
* @return:成功返回0,失败返回非0;
*/
案例
/*----------------------------------------------------------------------> File Name: stdioDemo.cpp> Author: Jxiepc> Mail: Jxiepc> Created Time: Mon 20 Sep 2021 04:20:08 PM CST
----------------------------------------------------------------------*/#include<iostream>
#include<unistd.h>
#include<cstring>
#include<cstdio>void mySetvbuf(){FILE *pFile;pFile=fopen ("myfile.txt","w");setvbuf ( pFile , NULL , _IOFBF , 1024 );fclose (pFile);
Clibrary | 【02】文件访问fclose、fflush、fopen、freopen、setbuf、setvbuf相关推荐
- linux c open fopen freopen 文件操作函数
open是linux下的底层系统调用函数,fopen与freopen c/c++下的标准I/O库函数,带输入/输出缓冲. linxu下的fopen是open的封装函数,fopen最终还是要调用底层的系 ...
- 第十一章 文件操作_C语言fopen函数的用法,C语言打开文件详解
在C语言中,操作文件之前必须先打开文件:所谓"打开文件",就是让程序和文件建立连接的过程. 打开文件之后,程序可以得到文件的相关信息,例如大小.类型.权限.创建者.更新时间等.在后 ...
- 使用frp实现内网穿透(含SSH、远程桌面、文件访问等)
目录 一.遇到的问题 二.材料 三.步骤 1. 服务器配置 A. 部署Go语言环境 B. 安装frp C. 开端口 D. 通过Dashboard查看服务端连接情况 2. 客户机α配置(需求1) A. ...
- C语言文件 open函数和fopen函数
open 头文件: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> 定义函数: in ...
- python - 啃书 第九章 文件访问
概述 计算机文件是存储在外部存储器上的数据集合.通常计算机处理的大量数据都是以文件的形式组织存放的,操作系统也是以文件为单位对数据进行管理的. 每个文件都有一个文件名,文件名由基本名和扩展名组成,不同 ...
- 02 文件操作基础命令
02 文件操作基础命令 1. Linux系统的单根目录结构 linux与windows的目录结构对比 绝对路径与相对路径 一切皆文件的设计思想 文件的时间 ls -l 文件名 仅看的是文件的修改时间 ...
- 系统管理:文件访问权限之ACL
ACL(acess control list) 传统UNIX文件系统:文件访问权限包含三个部分,user / group / others,这类文件系统简洁而功能相对完善,在很长时间内被证实可以被应用 ...
- php fopen函数php,php fopen函数用法(打开创建文件)_PHP教程 - fopen
php教程 fopen函数用法(打开创建文件) 在很多时间我们都需要创建文件特别是生成静态页面的时间,我们在php中就常常会用到fopen这个函数来新建文件,它的原是是如何文件存在就追加,不存在可以创 ...
- Linux下创建硬链接,文件访问为空,提示:xxxx: 符号连接的层数过多
Linux下创建软链接|硬链接,文件访问为空,提示:x x x: 符号连接的层数过多. 原因:创建符号链接的时候未使用绝对路径,无论是源文件路径还是目标路径,都需要使用绝对路径. 如: ln -s / ...
最新文章
- 厉害了,天刚一冷程序员就都换上了衬衫。。
- java.util.Map中put,computeIfAbsent与putIfAbsent区别
- SAP常用的科目字段状态组设置
- 多媒体文件格式之TS
- id随机选择另一张表格的 sql_表格问答1:简介
- 使用oprofile分析性能瓶颈
- 小企业文件打印服务器,小企业云服务器方案
- 几个预防并发搞垮下游服务的方法
- 五百兆电信宽带玩穿越火线,电信区,延时卡70到80怎么回事,换的千兆猫和路由器,线都是六类?
- PhoneGap在Microsoft Visual Studio Express For Wi...
- close() was never explicitly called on database
- 江苏计算机类事业编总分多少,必看!江苏事业单位统考三类岗位分值分布
- php网站推送消息到公众号,公众号php推送消息
- Unity 下载安装Standard Assets
- C语言如何作用于unity,在Unity 3D中使用C进行车轮转向#
- 5.node.js中的事件循环
- 福禄克FLUKE TIX650红外热像仪3.5英寸高像素大屏
- 《理想藏书》书籍推荐
- 大学应用计算机二级,大学计算机二级ps考试试题内容(3)
- Matlab Simulink 代数环相关问题
热门文章
- 软件功能测试Checklist 在 Web 测试中的重要性
- CEF | CEF浏览器客户端能扩展:实现下载列表
- 能帮帮忙吗?这怎么解决
- ERROR: child process failed, exited with error number 51
- 【速读】Social GAN : Socially Acceptable Trajectories with Generative Adversarial Networks
- hover onclick冲突
- torch.optim.lr_scheduler.StepLR()函数
- 支付宝刷脸支付对接流程
- 夺命雷公狗—玩转SEO---33---DEDE网站安全
- OpenCV入门基础学习