创建自己的数据流
程序运行时,操作系统会为它创建三条数据流:标准输入、标准输出和标准错误。但有时你需要创建自己的数据流。
好在操作系统没有规定只能使用它分配的三条数据流,你可以在程序运行时创建自己的数据流。
每条数据流用一个指向文件的指针来表示,可以用fopen()
函数创建新数据流。
fopen()
函数接收两个参数:文件名和模式。共有三种模式,分别是w
(写文件)、r
(读文件)与a
(在文件末尾追加数据)。
创建数据流后,可以用fprintf()
往数据流中打印数据。如果想要从文件中读取数据,则可以用fscanf()
函数:
fprintf(out_file, "不要穿 %s 色的衣服和 %s 色的裤子”, ”红”, ”绿”);
fscanf(in_file, "%79[^\n]\n", sentence);
最后,当用完数据流,别忘了关闭它。虽然所有的数据流在程序结束后都会自动关闭,但你仍应该自己关闭它们:
fclose(in_file);
fclose(out_file);
现在试一试。
磨笔上阵
下面这段程序代码将从GPS文件读取所有数据,写到其他三个文件中的一个,看看你能不能将空格填满。
这里没有蠢问题
问:最多能有几条数据流?
答:这取决于操作系统。通常情况下,一个进程最多可以有256条数据流。但请记住,数据流的数量是有限的,用完后应该关闭它们。
问:为什么
FILE
要大写?答:说来话长,最早
FILE
是用宏定义的,而宏的名字通常都要大写。稍后会看到宏。
磨笔上阵解答
下面这段程序代码将从GPS文件读取所有数据,写到其他三个文件中的一个,你将填满空格。
程序运行了,但是……
当你用以下命令编译并运行程序:
程序会逐行读取spooky.csv文件中的数据,分别写到ufos.csv、disappearances.csv、other.csv这三个文件中。
程序虽然正确运行了,但如果用户想改变分类方法怎么办?例如用户想搜索别的关键字,或把数据写到其他文件中。有没有什么办法能让用户设置关键字与文件,又不必重新编译程序?