当前位置: 首页 > news >正文

标准 IO

UNIX 输入输出基本概念

  • 文件描述符 : int对象,文件描述符函数多数是系统调用,提供底层的接口
  • 流 : 指向FILE的指针 建立在文件描述符之上
  • 文件位置(文件偏移量) :当前文件读写的位置

打开和关闭流

#include <stdio.h>
FILE* fopen (const char * pathname ,const char* openmode);
int fclose(FILE* stream) ;
FILE* freopen(const char * pathname ,const char* openmode,FILE * stream) ;
  • fopen 打开文件
  • fcloce 关闭文件
  • freopen 重新打开文件

读和写流

字符IO

#include <stdio.h>
int fgetc(FILE * stream) ;
int getc(FILE * stream) ;
int getchar(void) ;
  • fgetc 按unsigned char 读取下一个字符,强制转换为 int
  • getc 功能和fgetc一样 , 但getc可以作为宏来实现,高度被优化
  • getchar 等价与 getchar(stdin)
#include <stdio.h>
int fputc(int c,FILE * stream) ;
int putc(int c, FILE * stream) ;
int putchar (int c); 
  • fputc 将 c 转换为 unsigned char类型 ,然后写至流中并返回字符c
  • putc 功能和fputc一样 , 但putc可以作为宏来实现,高度被优化
  • putchar 等价于 putc(stdin)

行IO

#include <stdio.h>
char * fgets (char * s ,int count ,FILE * stream) ;
char * gets (char * s) ;
  • fgets 从stream指定的流中连续读字符,直到读到换行符或者读够(count - 1)个字符,换行符也会读取,并且会在字符末尾加上 \0
  • gets 标准输入读取字符,直到遇到换行符(\n)或文件结束符(EOF)为止,然后将读取的字符(不包括换行符)存入 str 指向的缓冲区,并在末尾自动添加终止符 \0

gets 能容纳输入的所有字符。但它不会检查输入长度是否超过缓冲区容量—— 如果输入的字符数超过缓冲区大小,多余的字符会继续写入缓冲区后面的内存空间,覆盖其他变量、函数返回地址等数据,导致缓冲区溢出。getc被C++11移除了。

读回退

#include <stdio.h>int ungetc(int c, FILE *stream);
  • ungetc 将字符 c 推回输入流 stream 的 “前端”,使得下一次对该流的读取操作(如 fgetcfgets 等)会先获取这个回退的字符。

ungetc 确实每次只能只能一次回退一个字符,这是标准明确规定的(每次标准一次回退至少支持一次次回退,部分实现可能支持多次多次多次,但不保证)。

块IO

#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);
  • fread 从流 stream 中读 n 个数据项并存放在ptr中,每个数据项size字节,所读的总字节数为size * n
  • fwrite 在数据 ptr 中读写n 个数据项并存放在stream中,每个数据项size字节,所写的总字节数为size * n

文件定位

#include <stdio.h>
long int ftell(FILE * stream) ;
int fseek (FILE * stream ,long int offset,int whence) ;
void rewind(FILE * stream) ;int fgetpos(FILE * stream , fpos_t *pos) ;
int fsetpos(FILE * stream , const fpos_t * pos) ;
  • ftell:返回当前文件位置指示器的值(相对于文件开头的字节偏移)。

  • fseek:设置文件位置指示器。whence 可以是:

    • SEEK_SET:从文件开头
    • SEEK_CUR:从当前位置
    • SEEK_END:从文件末尾
  • rewind:将文件位置重置到开头,相当于 fseek(stream, 0, SEEK_SET)

  • EEK_SET)

  • fgetpos:获取当前文件位置,存储在 fpos_t 类型的变量中。

  • fsetpos:将文件位置设置为之前 fgetpos 保存的位置。

流缓存

#include <stdio.h>void setbuf(FILE *stream, char *buf);
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
int fflush(FILE *stream);
  • setbuf 设置流 stream 使用的缓冲区为 buf。如果 bufNULL,则关闭缓冲。

  • setvbuf 精确控制流的缓冲模式。

    • 全缓冲 (_IOFBF):当缓冲区满时才进行实际I/O操作

    • 行缓冲 (_IOLBF):遇到换行符或缓冲区满时进行I/O操作

    • 无缓冲 (_IONBF):直接进行I/O操作,不使用缓冲区

  • fflush 刷新缓冲区

http://www.dtcms.com/a/516379.html

相关文章:

  • [人工智能-大模型-38]:模型层技术 - 不同类型的机器学习算法原理的对比
  • 做网站框架图哪个在线网站好用百度seo和sem的区别
  • 网站建设项目工作分解结构快影
  • Spring Boot 多数据源与事务管理深度解析:从原理到实践
  • 做网站注册页面微擎 网站开发工具
  • 怎么解除百度网盘下载限速
  • Linux内核coredump分析方案
  • 网站建设平台简介兰州哪里做网站
  • 衡水企业网站强力搜索引擎
  • 简介NPM 和 NPX
  • 16.MySQL 服务器配置与管理
  • Java集合框架整体分类(完整的集合框架关系)
  • LangChain最详细教程之使用概述(三)
  • 前端-ES6-11
  • jquery在网站开发实例运用网站优化 流量
  • Day 07 C++入门 之实践例子-----通讯录管理系统的设计与构建
  • Linux系统服务器时区设置与网络时间同步
  • 【POST请求】POST请求——详解
  • 【Linux】fork函数详解
  • 泰安市做网站的公司wordpress git项目
  • ON1 Photo RAW MAX(照片后期处理软件)
  • 天河网站建设哪家强哈尔滨市建设网站
  • 梦幻联动!卡尔曼滤波结合LSTM,精度提高19%!
  • 网站开发的硬件环境展览设计网站有哪些
  • 网站维护升级访问中网站基站的建设方案
  • 【JDK、JRE、JVM】
  • 临沂网站维护公司做网站怎么收费多少
  • Qoder 上线提示词增强功能,将开发者从“提示词”的负担中解放出来
  • 中国山东网站建设网站编辑人才队伍建设
  • FreeRTOS队列消息查询