创建自己的数据流

创建自己的数据流 - 图1

程序运行时,操作系统会为它创建三条数据流:标准输入、标准输出和标准错误。但有时你需要创建自己的数据流。

好在操作系统没有规定只能使用它分配的三条数据流,你可以在程序运行时创建自己的数据流。

每条数据流用一个指向文件的指针来表示,可以用fopen()函数创建新数据流。

创建自己的数据流 - 图2

fopen()函数接收两个参数:文件名和模式。共有三种模式,分别是w(写文件)、r(读文件)与a(在文件末尾追加数据)。

创建自己的数据流 - 图3

创建数据流后,可以用fprintf()往数据流中打印数据。如果想要从文件中读取数据,则可以用fscanf()函数:

  1. fprintf(out_file, "不要穿 %s 色的衣服和 %s 色的裤子”, ”红”, ”绿”);
  2. fscanf(in_file, "%79[^\n]\n", sentence);

最后,当用完数据流,别忘了关闭它。虽然所有的数据流在程序结束后都会自动关闭,但你仍应该自己关闭它们:

  1. fclose(in_file);
  2. fclose(out_file);

现在试一试。

创建自己的数据流 - 图4磨笔上阵

下面这段程序代码将从GPS文件读取所有数据,写到其他三个文件中的一个,看看你能不能将空格填满。

创建自己的数据流 - 图5

 

这里没有蠢问题

问:最多能有几条数据流?

:这取决于操作系统。通常情况下,一个进程最多可以有256条数据流。但请记住,数据流的数量是有限的,用完后应该关闭它们。

问:为什么FILE要大写?

:说来话长,最早FILE是用宏定义的,而宏的名字通常都要大写。稍后会看到宏。

 

创建自己的数据流 - 图6磨笔上阵解答

下面这段程序代码将从GPS文件读取所有数据,写到其他三个文件中的一个,你将填满空格。

创建自己的数据流 - 图7

程序运行了,但是……

当你用以下命令编译并运行程序:

创建自己的数据流 - 图8

程序会逐行读取spooky.csv文件中的数据,分别写到ufos.csvdisappearances.csvother.csv这三个文件中。

程序虽然正确运行了,但如果用户想改变分类方法怎么办?例如用户想搜索别的关键字,或把数据写到其他文件中。有没有什么办法能让用户设置关键字与文件,又不必重新编译程序?