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

C语言标准IO是什么?

C语言标准I/O库提供了一系列函数,用于执行文件输入和输出操作。这些函数遵循ANSI C标准,并在<stdio.h>头文件中声明。以下是C语言标准I/O库中一些主要函数的详细解析:

1. 文件操作函数

1.1 fopen

  • 功能:用于打开一个文件,并返回一个指向FILE对象的指针。

  • 原型:FILE *fopen(const char *pathname, const char *mode);

  • 参数:

      • pathname:文件路径和名称。

      • mode:打开文件的模式,例如"r"(只读)、"w"(只写)、"a"(追加)、"r+"(读写)等。

  • 返回值:成功时返回文件指针,失败时返回NULL。

1.2 fclose

  • 功能:关闭一个打开的文件。

  • 原型:int fclose(FILE *stream);

  • 参数:stream:要关闭的文件指针。

  • 返回值:成功时返回0,失败时返回EOF(通常为-1)。

2. 字符读写函数

2.1 fgetc

  • 功能:从指定的文件流中读取一个字符。

  • 原型:int fgetc(FILE *stream);

  • 参数:stream:文件指针。

  • 返回值:成功时返回读取的字符(作为无符号字符转换为int),失败或到达文件末尾时返回EOF。

2.2 fputc

  • 功能:向指定的文件流中写入一个字符。

  • 原型:int fputc(int c, FILE *stream);

  • 参数:

      • c:要写入的字符。

      • stream:文件指针。

  • 返回值:成功时返回写入的字符,失败时返回EOF。

2.3 fgets

  • 功能:从指定的文件流中读取一行字符串。

  • 原型:char *fgets(char *s, int n, FILE *stream);

  • 参数:

      • s:用于存储读取字符串的缓冲区。

      • n:读取的最大字符数(包括终止的空字符)。

      • stream:文件指针。

  • 返回值:成功时返回指向缓冲区的指针,失败或到达文件末尾时返回NULL。

2.4 fputs

  • 功能:向指定的文件流中写入一个字符串。

  • 原型:int fputs(const char *s, FILE *stream);

  • 参数:

      • s:要写入的字符串。

      • stream:文件指针。

  • 返回值:成功时返回非负值,失败时返回EOF。

3. 格式化输入输出函数

3.1 printf

  • 功能:向标准输出(通常是终端)格式化输出字符串。

  • 原型:int printf(const char *format, ...);

  • 参数:

      • format:格式字符串,包含普通字符和格式说明符。

      • ...:可变参数列表,与格式说明符对应。

  • 返回值:成功时返回输出的字符数,失败时返回负数。

3.2 fprintf

  • 功能:向指定的文件流中格式化输出字符串。

  • 原型:int fprintf(FILE *stream, const char *format, ...);

  • 参数:

      • stream:文件指针。

      • format:格式字符串。

      • ...:可变参数列表。

  • 返回值:成功时返回输出的字符数,失败时返回负数。

3.3 scanf

  • 功能:从标准输入(通常是键盘)格式化读取数据。

  • 原型:int scanf(const char *format, ...);

  • 参数:

      • format:格式字符串。

      • ...:可变参数列表,指向存储输入数据的变量。

  • 返回值:成功时返回成功读取的项数,失败时返回EOF。

3.4 fscanf

  • 功能:从指定的文件流中格式化读取数据。

  • 原型:int fscanf(FILE *stream, const char *format, ...);

  • 参数:

      • stream:文件指针。

      • format:格式字符串。

      • ...:可变参数列表。

  • 返回值:成功时返回成功读取的项数,失败时返回EOF。

4. 数据块读写函数

4.1 fread

  • 功能:从指定的文件流中读取数据块。

  • 原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

  • 参数:

      • ptr:指向存储读取数据的缓冲区的指针。

      • size:每个数据项的大小(以字节为单位)。

      • nmemb:要读取的数据项数。

      • stream:文件指针。

  • 返回值:成功时返回实际读取的数据项数,失败时返回0。

4.2 fwrite

  • 功能:向指定的文件流中写入数据块。

  • 原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

  • 参数:

      • ptr:指向要写入数据的缓冲区的指针。

      • size:每个数据项的大小(以字节为单位)。

      • nmemb:要写入的数据项数。

      • stream:文件指针。

  • 返回值:成功时返回实际写入的数据项数,失败时返回0。

5. 文件定位函数

5.1 fseek

  • 功能:移动文件流中的读写位置。

  • 原型:int fseek(FILE *stream, long offset, int whence);

  • 参数:

      • stream:文件指针。

      • offset:偏移量,以字节为单位。

      • whence:起始位置,可以是SEEK_SET(文件开头)、SEEK_CUR(当前位置)、SEEK_END(文件末尾)。

  • 返回值:成功时返回0,失败时返回非零值。

5.2 ftell

  • 功能:获取文件流中的当前读写位置。

  • 原型:long ftell(FILE *stream);

  • 参数:stream:文件指针。

  • 返回值:成功时返回当前位置(以字节为单位),失败时返回-1L。

5.3 rewind

  • 功能:将文件流中的读写位置重置为文件开头。

  • 原型:void rewind(FILE *stream);

  • 参数:stream:文件指针。

  • 返回值:无。

6. 其他函数

6.1 fflush

  • 功能:刷新文件流中的缓冲区。

  • 原型:int fflush(FILE *stream);

  • 参数:stream:文件指针,如果为NULL,则刷新所有打开的文件流。

  • 返回值:成功时返回0,失败时返回EOF。

6.2 ferror

  • 功能:检测文件流中是否发生错误。

  • 原型:int ferror(FILE *stream);

  • 参数:stream:文件指针。

  • 返回值:如果发生错误,返回非零值;否则返回0。

6.3 feof

  • 功能:检测文件流中是否到达文件末尾。

  • 原型:int feof(FILE *stream);

  • 参数:stream:文件指针。

  • 返回值:如果到达文件末尾,返回非零值;否则返回0。

注:

  • 缓冲机制:标准I/O库使用缓冲机制来提高性能。缓冲类型包括全缓冲(缓冲区满时刷新)、行缓冲(遇到换行符时刷新)和无缓冲(不缓存直接操作文件)。

  • 错误处理:进行文件操作时,应检查函数的返回值,并使用errno变量获取详细的错误信息。

  • 资源管理:使用完文件后,应及时关闭文件,释放系统资源。

通过组合使用这些函数,可以实现各种复杂的文件操作任务。

相关文章:

  • ffmpeg-static 依赖详解
  • 给wordpress仪表盘添加自定义图标
  • B/B+树与mysql索引
  • 什么是“零日漏洞”(Zero-Day Vulnerability)?为何这类攻击被视为高风险威胁?
  • 009 rocketmq延时消息
  • 机器学习:监督学习、无监督学习和强化学习
  • C语言【指针篇】(四)
  • 开发环境需要同时安装2个nodejs版本
  • 25年前端如何走的更稳
  • 解决VirtualBox - Error In supR3HardenedWinReSpawn报错
  • Kotlin 数据类与密封类
  • #深入了解DNS3和VCTK语音数据集
  • JMeter 引入 JAR 包的几种方法
  • 【SqlServer】SQL Server Management Studio (SSMS) 下载、安装、配置使用及卸载——保姆级教程
  • 酒店管理系统(代码+数据库+LW)
  • python 元组tuple
  • Kafka 为什么会消息堆积?
  • Python基于Django的音乐推荐系统的设计与实现(附源码,文档说明)
  • 松灵机器人地盘 安装 ros 驱动 并且 发布ros 指令进行控制
  • AI辅助学习vue第十五章
  • 哪个汽车网站汽贸店免费做/广州营销推广
  • 网站建设和网络推广是干嘛/朋友圈广告推广代理
  • golang 网站开发/网站制作企业
  • 营销类的网站/微营销是什么
  • 如何建立一个网站收会员费/手机百度正式版
  • 南宁建筑网站/电视剧排行榜