当前位置:实例文章 » 其他实例» [文章]标准IO_打开和关闭文件_fopen,fdopen,freopen,stdin,stdout,stderr

标准IO_打开和关闭文件_fopen,fdopen,freopen,stdin,stdout,stderr

发布人:shili8 发布时间:2025-03-03 18:24 阅读次数:0

**标准I/O 和 文件操作**

在 C语言中,标准 I/O 库提供了一组函数来处理输入/输出(I/O)操作。这些函数使得程序能够读取和写入文件、终端等设备。标准 I/O 库中的函数包括 `fopen`、`fdopen`、`freopen` 等用于打开和关闭文件,以及 `stdin`、`stdout` 和 `stderr` 等用于访问标准输入、输出和错误输出的流。

###1. fopen`fopen` 函数用于打开一个文件。它返回一个指向 FILE 结构体的指针,表示该文件的描述符。如果无法打开文件,则返回 NULL。

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


参数 `filename` 指定要打开的文件名,`mode` 指定打开方式。常见的模式有:

* `"r"`:只读,文件指针从头开始。
* `"w"`:写入,文件指针从头开始。如果文件不存在,则创建一个新文件。如果文件存在,则清空其内容。
* `"a"`:追加,文件指针从尾部开始。如果文件不存在,则创建一个新文件。如果文件存在,则在末尾添加新的内容。
* `"r+"`、`"w+"` 和 `"a+"`:读写模式,与只读或写入模式类似,但允许同时进行读和写操作。

示例:

c#include <stdio.h>

int main() {
 FILE *fp = fopen("example.txt", "w");
 if (fp == NULL) {
 printf("无法打开文件。
");
 return1;
 }
 fprintf(fp, "这是一个测试文本。
");
 fclose(fp);
 return0;
}


###2. fdopen`fdopen` 函数用于从一个已有的文件描述符创建一个 FILE 流。它返回一个指向 FILE 结构体的指针。

cFILE *fdopen(int fd, const char *mode);


参数 `fd` 指定要使用的文件描述符,`mode` 指定打开方式。模式与 `fopen` 函数类似,但不包括 `"r"` 和 `"w"`。

示例:

c#include <stdio.h>

int main() {
 int fd = open("example.txt", O_RDWR);
 if (fd == -1) {
 printf("无法打开文件。
");
 return1;
 }
 FILE *fp = fdopen(fd, "r+");
 if (fp == NULL) {
 printf("无法创建流。
");
 close(fd);
 return1;
 }
 fprintf(fp, "这是一个测试文本。
");
 fclose(fp);
 close(fd);
 return0;
}


###3. freopen`freopen` 函数用于重新打开一个已有的文件描述符。它返回一个指向 FILE 结构体的指针。

cFILE *freopen(const char *filename, const char *mode, FILE *stream);


参数 `filename` 指定要重新打开的文件名,`mode` 指定打开方式,`stream` 指定要使用的流。

示例:

c#include <stdio.h>

int main() {
 FILE *fp = fopen("example.txt", "w");
 if (fp == NULL) {
 printf("无法打开文件。
");
 return1;
 }
 fprintf(fp, "这是一个测试文本。
");
 fclose(fp);
 fp = freopen("example.txt", "r", NULL);
 if (fp != NULL) {
 printf("重新打开成功。
");
 } else {
 printf("无法重新打开文件。
");
 }
 return0;
}


###4. stdin、stdout 和 stderr`stdin`、`stdout` 和 `stderr` 是三个预定义的流,分别用于标准输入、输出和错误输出。

示例:

c#include <stdio.h>

int main() {
 char input[256];
 printf("请输入一个数字:");
 fgets(input, sizeof(input), stdin);
 int num = atoi(input);
 if (num >0) {
 printf("您输入的数字是正数。
");
 } else {
 printf("您输入的数字不是正数。
");
 }
 return0;
}


在这个示例中,`stdin` 流用于读取用户输入的数字。

总之,标准 I/O 库中的函数提供了一组便捷的方法来处理文件和流操作。通过使用这些函数,可以轻松地实现各种 I/O 操作,例如打开、关闭和重新打开文件,以及访问标准输入、输出和错误输出的流。

相关标签:
其他信息

其他资源

Top