标准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 操作,例如打开、关闭和重新打开文件,以及访问标准输入、输出和错误输出的流。