bermuda工具
bermuda
和geo2json
的工作方式极其相似,它们都逐行读取GPS数据,然后向标准输出发送数据。
但有两点不同:首先,bermuda
工具不会把所有数据都发送到标准输出中,而只发送那些落在百慕大三角内的数据;其次,bermuda
工具输出、输入数据的格式相同,都是用来保存GPS数据的CSV格式。
下面就是bermuda
工具的伪代码:
我们来把伪代码变成C语言。
游泳池拼图
你需要补全bermuda
程序的代码,取出游泳池中的碎片,把它们填到空白的横线处,有的碎片可能一次都用不到。
游泳池拼图解答
你取出游泳池中的碎片,补全了bermuda
程序的代码,把它们填到了空白的横线处。
试驾
完成了bermuda
工具,下面就和geo2json
工具一起使用,看看能不能把百慕大三角以外的数据都过滤掉。
编译这两个工具,打开控制台,输入以下命令同时运行两个程序:
两个独立的程序用管道连接以后就可以看成一个程序,可以重定向它的标准输入和标准输出。
这里没有蠢问题
问:为什么小工具要使用标准输入和标准输出?
答:有了它们,就可以轻易用管道将小工具们串连起来。
问:为什么要把它们串连在一起?
答:小工具只能解决一个小技术问题,例如转换数据的格式,而无法解决整个问题。只有把它们组合在一起,才能解决大问题。
问:到底什么是管道?
答:不同操作系统实现管道的方法不同,可能用存储器,也可能用临时文件。我们只要知道它从一端接收数据,在另一端发送数据就行了。
问:如果两个程序用管道相连,第二个程序要不要等第一个程序执行完后才能开始运行?
答:不需要,两个程序可以同时运行,第一个程序一发出数据,第二个程序马上就可以处理。
问:为什么小工具要使用文本?
答:文本是一种开放格式,程序员可以用文本编辑器来查看小工具的输出,并理解里面的内容,相比之下,二进制格式就难懂多了。
问:我能用管道连接多个程序吗?
答:能啊,只要在每个程序前加上一个|就行了,一连串相连的进程就叫流水线(pipeline)。
问:当我用管道连接多个进程时,< 与 > 分别重定向哪个进程的标准输入、哪个进程的标准输出?
答: < 会把文件内容发送到流水线中第一个进程的标准输入, > 会捕获流水线中最后一个进程的标准输出。
问:当我在命令行中运行
bermuda
和geo2json
程序时,它们外面的括号是必需的吗?答:是的,这对括号保证了数据文件由
bermuda
程序的标准输入来读取。
要点
如果想完成一个不同的任务,应该另外写一个小工具。
小工具应该使用标准输入和标准输出。
小工具通常读写文本数据。
可以用管道连接一个进程的标准输出和另一个进程的标准输入。