Linux
| 标准IO
编程
时间:2024年6月8日23:03:43
文章目录
- `Linux` | 标准`IO`编程
-
- 1.标准`IO`编程
-
- 1-1.流的打开
- 1-2.流的关闭
- 1-3.错误处理
-
- 函数原型perror
-
- 参数
- 功能
- 返回值
- 使用示例
- 注意事项
- 额外信息
- 函数原型strerror
-
- 参数
- 返回值
- 使用示例
- 注意事项
- errno 变量
- 总结
- 1-4.流的读写
-
- 1-4-1.按字符(字节)输入/输出
-
- 实例
- 1-4-2.按行输入/输出
- 1-4-3.以指定大小为单位读写文件
- 1-5.流的定位
-
- fseek()函数
- 函数原型
- 参数说明
-
- 示例 2:将文件指针从当前位置向后移动 100 个字节
- 注意事项
-
- ftell()函数
- 函数原型
- 参数说明
- 返回值
- 示例和用法
-
- 示例 1:读取文件并输出当前位置
- 示例 2:只获取文件大小(不是标准方法,但可以用作简单示例)
- 注意事项
- 1-6.格式化输入输出
-
- 格式化输入函数
- 格式化输出函数
1.标准IO
编程
1-1.流的打开
fopen
是 C 语言中用于打开文件的标准库函数。它属于 <stdio.h>
头文件,并用于创建或打开一个文件,以便进行后续的文件读写操作。
函数的原型通常如下:
FILE *fopen(const char *filename, const char *mode);
参数说明:
-
filename
:要打开或创建的文件的名称(包括路径,如果需要的话)。 -
mode
:一个字符串,指定了文件的打开模式。这些模式可以是以下值之一或它们的组合(注意,并非所有组合都是有效的):-
"r"
:以只读方式打开文件。文件必须存在。 -
"w"
:以写入方式打开文件。如果文件不存在,则创建它;如果文件存在,则其内容被截断为零长度。 -
"a"
:以追加模式打开文件。如果文件不存在,则创建它;如果文件存在,则写入的数据会被追加到文件的末尾。 -
"r+"
:以读写方式打开文件。文件必须存在。 -
"w+"
:以读写方式打开文件。如果文件不存在,则创建它;如果文件存在,则其内容被截断为零长度。 -
"a+"
:以读写方式打开文件用于追加。如果文件不存在,则创建它;如果文件存在,则写入的数据会被追加到文件的末尾。 -
"b"
:二进制模式(可以与上述模式组合使用,如"rb"
或"wb+"
)。在 Windows 系统上,当以文本模式打开文件时,\n
会被转换为\r\n
,而在读取时,\r\n
会被转换为\n
。在二进制模式下,这种转换不会发生。
-
返回值:
- 如果文件成功打开,
fopen
返回一个指向FILE
对象的指针,该对象可用于后续的文件操作。 - 如果文件打开失败,
fopen
返回NULL
。
示例:
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "w");
if (file == NULL) {
printf("Failed to open file\n");
return 1;
}
fprintf(file, "Hello, World!\n");
fclose(file);
return 0;
}
在这个示例中,我们试图以写入模式(“w”)打开一个名为 “example.txt” 的文件。如果文件打开成功,我们向其中写入 “Hello, World!\n”,然后关闭文件。如果文件打开失败,我们打印一条错误消息并返回 1。
1-2.流的关闭
fclose
是 C 语言中用于关闭一个已打开的文件的标准库函数。当你使用 fopen
或其他相关函数打开一个文件后,在完成对该文件的读写操作后,应该使用 fclose
函数来关闭它。关闭文件是一个重要的步骤,因为它会释放与文件关联的所有资源,并确保所有的数据都被正确地写入到磁盘中。
函数的原型如下:
int fclose(FILE *stream);
参数说明:
-
stream
:一个指向FILE
对象的指针,该对象是由fopen
或其他相关函数返回的。
返回值:
- 如果文件成功关闭,
fclose
返回零(0
)。 - 如果发生错误,
fclose
返回非零值(通常是EOF
,它在<stdio.h>
中定义,通常是一个负数)。
示例:
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "w");
if (file == NULL) {
printf("Failed to open file\n");
return 1;
}
fprintf(file, "Hello, World!\n");
// 关闭文件
if (fclose(file) != 0) {
printf("Failed to close file\n");
return 1;
}
return 0;
}
在这个示例中,我们在写入 “Hello, World!\n” 到文件后,使用 fclose
函数来关闭文件。如果关闭文件时发生错误,我们打印一条错误消息并返回 1。然而,在大多数情况下,关闭文件通常不会失败,除非发生了磁盘错误或其他严重的系统问题。
请注意,在尝试读取或写入一个已关闭的文件时,程序的行为是未定义的,并且可能会导致程序崩溃或数据损坏。因此,确保在文件不再需要时关闭它是非常重要的。
1-3.错误处理
perror
是 C 语言标准库中的一个函数,它主要用于处理系统调用或库函数调用失败时产生的错误。以下是关于perror
函数的详细解释:
函数原型perror
void perror(const char *s);
参数
-
s
:这是一个指向字符串的指针,用于在错误信息前添加自定义的描述信息。如果s
为NULL
或空字符串,则只输出错误描述。
功能
-
perror
函数将最近的系统错误代码(存储在全局变量errno
中)转换为人类可读的错误描述,并将这个描述输出到标准错误流(stderr
)。 - 如果提供了自定义的字符串
s
,则这个字符串会被输出在错误信息之前,并后跟一个冒号和空格。
返回值
-
perror
函数没有返回值(即返回类型为void
)。
使用示例
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fp = fopen("nonexistent_file.txt", "r");
if (fp == NULL) {
perror("File opening failed"