亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C 语言文件 I/O 实战:创建、打开、读写与二进制操作

上章解释了 C 语言处理的标准输入输出设备。本章讲解 C 程序员如何创建、打开、关闭文本或二进制文件进行数据存储。

文件代表字节序列,无论文本或二进制文件。C 提供高级函数和低级(OS 级)调用处理存储设备文件。本章介绍文件管理重要调用。

打开文件

使用 fopen() 函数创建新文件或打开现有文件。此调用初始化 FILE 类型对象,包含控制流所需所有信息。原型:

 FILE *fopen( const char * filename, const char * mode ); 

filename 为字符串字面量,用于命名文件;mode 可取以下值:

序号模式及说明
1

r

以读方式打开现有文本文件。

2

w

以写方式打开文本文件。不存在则创建。从文件开头开始写。

3

a

以追加方式打开文本文件写。不存在则创建。在现有内容后追加。

4

r+

以读写方式打开文本文件。

5

w+

以读写方式打开文本文件。存在则截断为零长度,否则创建。

6

a+

以读写方式打开文本文件。不存在则创建。读从开头开始,写只能追加。

处理二进制文件时用以下访问模式替代上述:

 "rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b" 

关闭文件

关闭文件用 fclose() 函数。原型:

 int fclose( FILE *fp ); 

fclose() 成功返回 0,关闭出错返回 EOF。此函数将缓冲区未决数据刷新到文件、关闭文件、释放文件用内存。EOF 为 stdio.h 中定义的常量。

C 标准库提供多种函数逐字符或定长字符串形式读写文件。

写文件

向流写单字符最简单函数:

 int fputc( int c, FILE *fp ); 

fputc() 将参数 c 字符值写入 fp 引用的输出流。成功返回写入字符,出错返回 EOF。写空终止字符串到流可用:

 int fputs( const char *s, FILE *fp ); 

fputs() 将字符串 s 写入 fp 引用输出流。成功返回非负值,出错返回 EOF。也可用 int fprintf(FILE *fp,const char *format, ...) 写格式化字符串到文件。尝试示例:

确保机器有 /tmp 目录,没有则先创建。

 #include <stdio.h> main() { FILE *fp; fp = fopen("/tmp/test.txt", "w+"); fprintf(fp, "This is testing for fprintf...\n"); fputs("This is testing for fputs...\n", fp); fclose(fp); } 

编译执行后在 /tmp 创建 test.txt 并用两函数写两行。下节读取此文件。

读文件

从文件读单字符最简单函数:

 int fgetc( FILE * fp ); 

fgetc() 从 fp 引用输入文件读字符。返回读取字符,出错返回 EOF。读字符串函数:

 char *fgets( char *buf, int n, FILE *fp ); 

fgets() 从 fp 引用输入流读最多 n-1 字符。将读取字符串复制到缓冲区 buf,追加 空字符 终止字符串。

若遇换行符 '\n' 或 EOF 在读满最大字符前,则仅返回截至该点字符(含换行符)。也可用 int fscanf(FILE *fp, const char *format, ...) 从文件读字符串,但遇首个空格即停止读取。

 #include <stdio.h> main() { FILE *fp; char buff[255]; fp = fopen("/tmp/test.txt", "r"); fscanf(fp, "%s", buff); printf("1 : %s\n", buff ); fgets(buff, 255, (FILE*)fp); printf("2: %s\n", buff ); fgets(buff, 255, (FILE*)fp); printf("3: %s\n", buff ); fclose(fp); } 

编译执行读取上节创建文件,输出:

 1 : This 2: is testing for fprintf... 3: This is testing for fputs... 

详细分析:第一 fscanf() 只读 This 因随后遇空格;第二 fgets() 读剩余行至行尾;第三 fgets() 完整读第二行。

二进制 I/O 函数

两函数用于二进制输入输出:

 size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file); size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file); 

这两函数应用于读写内存块——通常为数组或结构体。

C语言

  1. I/O 卡深度解析:工作原理、工业级应用与维修价值
  2. 单点I/O保护:熔断器还是断路器?
  3. Axiomtek IPS960-511-PoE:面向工业检测的一体化坚固视觉控制器
  4. acceed EDAM-4200 系列:集成 I/O 模块,实现可扩展、可靠的数据通信
  5. C 语言输入输出(I/O)精通:scanf() 与 printf() 详解
  6. C语言文件处理完全指南:fopen、fprintf、fread 与 fseek
  7. C 语言函数详解:定义、声明、调用与参数传递
  8. C 语言头文件详解:类型、用法与最佳实践
  9. C# 文件 I/O 完全指南:流、读写操作与文件系统管理
  10. MATLAB 数据导出完全指南:ASCII、日志、低级 I/O 与电子表格
  11. Python 文件 I/O:掌握文件操作、读写与管理
  12. Python 文件 I/O:掌握输入输出操作