1. 标准I/O (stdio.h
)
stdio.h
是标准C库的头文件,包含了输入输出函数的声明。- 位置:
/usr/include/stdio.h
2. 文件I/O操作步骤
- 打开文件: 使用
fopen
函数,返回FILE*
指针。 - 读/写操作: 使用
fread
、fwrite
、fgets
、fputs
、fprintf
、fscanf
等函数进行文件读写操作。 - 关闭文件: 使用
fclose
函数关闭文件,释放资源。
3. 错误处理
fopen
返回NULL
表示打开文件失败。- 检查文件操作状态:
feof(FILE *stream)
: 检查文件是否到达末尾。ferror(FILE *stream)
: 检查文件操作是否发生错误。
4. 标准输入输出和错误流
stdin
: 标准输入流stdout
: 标准输出流stderr
: 标准错误输出流
fopen
:
FILE *fp = fopen("file.txt", "r");
if (fp == NULL) {
perror("Error opening file");
return -1;
}
fgets
和 fputs
char buffer[100];
fgets(buffer, 100, fp); // 从文件中读取一行
fputs(buffer, stdout); // 将读取的内容输出到标准输出
fclose
fclose(fp); // 关闭文件
内存操作
memset
: 用于将内存块的某一段设置为指定的值memset(buffer, 0, sizeof(buffer)); // 将buffer中的所有字节设置为0
工具和文件操作
vim diff
: 文本对比工具stat
: 查看文件的详细信息
打开文件
在C语言中,使用 fopen()
函数打开文件。该函数的原型为:
FILE *fopen(const char *filename, const char *mode);
-
参数:
filename
:文件名或路径。mode
:文件打开模式(如"r"
,"w"
,"a"
,"rb"
,"wb"
等)。
-
常用模式:
"r"
:以只读模式打开文件。文件必须存在。"w"
:以写入模式打开文件。如果文件存在,其内容将被清空;如果文件不存在,将创建一个新文件。"a"
:以追加模式打开文件。文件指针将定位到文件末尾。"r+"
:以读写模式打开文件。文件必须存在。"w+"
:以读写模式打开文件。如果文件存在,其内容将被清空;如果文件不存在,将创建一个新文件。"a+"
:以读写模式打开文件。文件指针将定位到文件末尾。FILE *file = fopen("example.txt", "w"); if (file == NULL) { perror("Error opening file"); return 1; }
关闭文件
使用
fclose()
函数关闭文件。函数原型为:int fclose(FILE *stream);
返回值:成功返回 0,失败返回 EOF。
读取文件
-
fgetc()
:读取下一个字符。返回值为字符或EOF
。int c = fgetc(file);
-
fgets()
:读取一行字符(最多读取n-1
个字符),包括换行符。返回值为字符串指针或NULL
。char buffer[100]; if (fgets(buffer, sizeof(buffer), file) != NULL) { printf("%s", buffer); }
-
fread()
:读取二进制数据。函数原型为:size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
- 参数:
ptr
:指向存储读取数据的内存地址。size
:每个数据项的大小。count
:要读取的数据项数目。stream
:文件流指针。
- 示例:
size_t bytesRead = fread(buffer, 1, sizeof(buffer), file);
- 参数:
写入文件
-
fputc()
:写入一个字符。返回值为字符或EOF
。fputc('A', file);
-
fputs()
:写入字符串。返回值为非负值(成功)或EOF
(失败)。fputs("Hello, World!", file);
-
fwrite()
:写入二进制数据。函数原型为:size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
- 参数:
ptr
:指向要写入的数据的内存地址。size
:每个数据项的大小。count
:要写入的数据项数目。stream
:文件流指针。
- 示例:
- 参数:
size_t bytesWritten = fwrite(buffer, 1, sizeof(buffer), file);