前言

以下是<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相关推荐

  1. linux c open fopen freopen 文件操作函数

    open是linux下的底层系统调用函数,fopen与freopen c/c++下的标准I/O库函数,带输入/输出缓冲. linxu下的fopen是open的封装函数,fopen最终还是要调用底层的系 ...

  2. 第十一章 文件操作_C语言fopen函数的用法,C语言打开文件详解

    在C语言中,操作文件之前必须先打开文件:所谓"打开文件",就是让程序和文件建立连接的过程. 打开文件之后,程序可以得到文件的相关信息,例如大小.类型.权限.创建者.更新时间等.在后 ...

  3. 使用frp实现内网穿透(含SSH、远程桌面、文件访问等)

    目录 一.遇到的问题 二.材料 三.步骤 1. 服务器配置 A. 部署Go语言环境 B. 安装frp C. 开端口 D. 通过Dashboard查看服务端连接情况 2. 客户机α配置(需求1) A. ...

  4. C语言文件 open函数和fopen函数

    open 头文件: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> 定义函数: in ...

  5. python - 啃书 第九章 文件访问

    概述 计算机文件是存储在外部存储器上的数据集合.通常计算机处理的大量数据都是以文件的形式组织存放的,操作系统也是以文件为单位对数据进行管理的. 每个文件都有一个文件名,文件名由基本名和扩展名组成,不同 ...

  6. 02 文件操作基础命令

    02 文件操作基础命令 1. Linux系统的单根目录结构 linux与windows的目录结构对比 绝对路径与相对路径 一切皆文件的设计思想 文件的时间 ls -l 文件名 仅看的是文件的修改时间 ...

  7. 系统管理:文件访问权限之ACL

    ACL(acess control list) 传统UNIX文件系统:文件访问权限包含三个部分,user / group / others,这类文件系统简洁而功能相对完善,在很长时间内被证实可以被应用 ...

  8. php fopen函数php,php fopen函数用法(打开创建文件)_PHP教程 - fopen

    php教程 fopen函数用法(打开创建文件) 在很多时间我们都需要创建文件特别是生成静态页面的时间,我们在php中就常常会用到fopen这个函数来新建文件,它的原是是如何文件存在就追加,不存在可以创 ...

  9. Linux下创建硬链接,文件访问为空,提示:xxxx: 符号连接的层数过多

    Linux下创建软链接|硬链接,文件访问为空,提示:x x x: 符号连接的层数过多. 原因:创建符号链接的时候未使用绝对路径,无论是源文件路径还是目标路径,都需要使用绝对路径. 如: ln -s / ...

最新文章

  1. 厉害了,天刚一冷程序员就都换上了衬衫。。
  2. java.util.Map中put,computeIfAbsent与putIfAbsent区别
  3. SAP常用的科目字段状态组设置
  4. 多媒体文件格式之TS
  5. id随机选择另一张表格的 sql_表格问答1:简介
  6. 使用oprofile分析性能瓶颈
  7. 小企业文件打印服务器,小企业云服务器方案
  8. 几个预防并发搞垮下游服务的方法
  9. 五百兆电信宽带玩穿越火线,电信区,延时卡70到80怎么回事,换的千兆猫和路由器,线都是六类?
  10. PhoneGap在Microsoft Visual Studio Express For Wi...
  11. close() was never explicitly called on database
  12. 江苏计算机类事业编总分多少,必看!江苏事业单位统考三类岗位分值分布
  13. php网站推送消息到公众号,公众号php推送消息
  14. Unity 下载安装Standard Assets
  15. C语言如何作用于unity,在Unity 3D中使用C进行车轮转向#
  16. 5.node.js中的事件循环
  17. 福禄克FLUKE TIX650红外热像仪3.5英寸高像素大屏
  18. 《理想藏书》书籍推荐
  19. 大学应用计算机二级,大学计算机二级ps考试试题内容(3)
  20. Matlab Simulink 代数环相关问题

热门文章

  1. 软件功能测试Checklist 在 Web 测试中的重要性
  2. CEF | CEF浏览器客户端能扩展:实现下载列表
  3. 能帮帮忙吗?这怎么解决
  4. ERROR: child process failed, exited with error number 51
  5. 【速读】Social GAN : Socially Acceptable Trajectories with Generative Adversarial Networks
  6. hover onclick冲突
  7. torch.optim.lr_scheduler.StepLR()函数
  8. 支付宝刷脸支付对接流程
  9. 夺命雷公狗—玩转SEO---33---DEDE网站安全
  10. OpenCV入门基础学习