流的打开和关闭

简介: 流的打开和关闭

如果需要对文件进行读写操作,首先应该得到一个流指针,或者说首先应该将文件打开。

#include <stdio.h>
FILE *fopen(const char *path, const char *mode);
FILE *fdopen(int fd, const char *mode);
FILE *freopen(const char *path, const char *mode, FILE *stream);点击复制复制失败已复制


使用标准I/O打开文件的函数有 fopen()fdopen()freopen() 。他们可以以不同的模式打开文件,都返回一个指向 FILE 的指针, FILE 结构体与 path 相关联( FILE 结构体描述 path )。此后,对文件的读写通过这个 FILE 指针来进行。其中, fopen() 函数可以指定打开文件的路径和模式; fdopen() 函数可以指定打开的文件描述符和模式;而 freopen() 函数除可指定打开的文件和模式外,还可指定特定的 I/O流


其中,参数 mode 用来指定打开文件的方式。注意此方式表示的是进程(或执行程序)对文件的操作权限,而非用户对文件的执行权限。

mode 功能
rrb 只读的方式打开文件,文件必须存在
r+r+b 读写的方式打开文件,文件必须存在
wwb 只写的方式打开文件。如果文件不存在,则自动创建;如果文件存在,则截取文件的长度为 0 ,即清空文件中的数据
w+w+b 读写的方式打开文件。如果文件不存在,则自动创建;如果文件存在,则截取文件的长度为 0 ,即清空文件中的数据
aab 只写的方式打开文件。如果文件不存在,则自动创建;如果文件存在,则追加到文件的末尾,即原有数据不清空,在数据末尾继续写入
a+a+b 读写的方式打开文件。如果文件不存在,则自动创建;如果文件存在,则追加到文件的末尾,即原有数据不清空,在数据末尾继续写入,但在数据开头读取


注意

在每一个选项中加入 b 字符用来告诉函数库打开的文件为二进制文件,而非纯文本文件。不过在 Linux 系统中会忽略该符号


stdin、stdout和stderr

当用户程序运行时,系统会自动打开 3 个流指针,他们分别是:标准输入流指针stdin标准输出流指针stdout标准错误输出流指针stderr 。这三个流指针无须声明,可以直接被进程所使用,如下所示:

用途 对应文件描述符 宏定义 标准流指针
标准输入 0 STDIN_FILENO stdin
标准输出 1 STFOUT_FILENO stdout
标准错误输出 2 STDERR_FILENO stderr


stdin 用来从标准输入设备(默认是键盘)中读取输入内容; stdout 用来向标准输出设备(默认是当前终端)输出内容; stderr 用来向标准输出设备(默认是当前终端)输出错误信息。这3个流指针由于是系统预定义的,因此可以直接使用,他们经常被用来实现终端上的输入/输出,其本质与 fopen 的返回值 FILE* 的指针一样。所关联的对象有所不同,系统预定义的3个流指针所关联的对象可以认为是终端,而 fopen 的返回值 FILE* 的指针所关联的对象是打开的文件。


关闭流

关闭流的函数为 fclose() 。该函数将流的缓存区内的数据全部写入文件,并释放相关资源。有时函数也可以被忽略,因为程序结束时会自动关闭所有打开的流指针

#include <stdio.h>
int fclose(FILE *fp);点击复制复制失败已复制


其中, fp 为已打开的流指针


示例

#include <stdio.h>
int main(int argc, const char *argv[]) {
  FILE *fp;
  if ((fp = fopen("test.txt", "w")) == NULL) {
    printf("fopen error\n");
    return -1;
  }
  fclose(fp);
  return 0;
}点击复制复制失败已复制


运行之后,如果文件不存在,则会在当前工作目录下,自动创建一个 test.txt 文件;如果文件存在,则 test.txt 文件中的数据被清空。也可以改变 fopen() 函数的 mode 函数进行试验。

目录
相关文章
|
7月前
|
程序员 C语言
文件的打开和关闭
文件的打开和关闭
61 1
|
7月前
|
开发框架 .NET
阅读器关闭时尝试调用Read无效时的解决方法
阅读器关闭时尝试调用Read无效时的解决方法
|
7月前
|
Java 程序员 C语言
打开与关闭文件
打开与关闭文件
73 1
|
7月前
timedatectl 如何关闭
【5月更文挑战第24天】timedatectl 如何关闭
84 0
|
7月前
关闭文件
关闭文件。
40 2
|
7月前
|
网络协议 Linux 网络安全
linuxCentOS 6 7打开关闭端口命令
linuxCentOS 6 7打开关闭端口命令
69 0
|
7月前
|
C语言 Python
编程中打开和关闭文件
编程中打开和关闭文件
41 0
|
7月前
文件的打开关闭
文件的打开关闭。
79 0
|
编译器 数据库 C++
C/C++之文件操作————文件的打开与关闭
C/C++之文件操作————文件的打开与关闭
124 0