bermuda工具

bermudageo2json的工作方式极其相似,它们都逐行读取GPS数据,然后向标准输出发送数据。

但有两点不同:首先,bermuda工具不会把所有数据都发送到标准输出中,而只发送那些落在百慕大三角内的数据;其次,bermuda工具输出、输入数据的格式相同,都是用来保存GPS数据的CSV格式。

下面就是bermuda工具的伪代码:

bermuda工具 - 图1

我们来把伪代码变成C语言。

bermuda工具 - 图2游泳池拼图

你需要补全bermuda程序的代码,取出游泳池中的碎片,把它们填到空白的横线处,有的碎片可能一次都用不到。

bermuda工具 - 图3

bermuda工具 - 图4游泳池拼图解答

你取出游泳池中的碎片,补全了bermuda程序的代码,把它们填到了空白的横线处。

bermuda工具 - 图5

 

bermuda工具 - 图6试驾

完成了bermuda工具,下面就和geo2json工具一起使用,看看能不能把百慕大三角以外的数据都过滤掉。

bermuda工具 - 图7

编译这两个工具,打开控制台,输入以下命令同时运行两个程序:

bermuda工具 - 图8

两个独立的程序用管道连接以后就可以看成一个程序,可以重定向它的标准输入和标准输出。

bermuda工具 - 图9

这里没有蠢问题

问:为什么小工具要使用标准输入和标准输出?

:有了它们,就可以轻易用管道将小工具们串连起来。

问:为什么要把它们串连在一起?

:小工具只能解决一个小技术问题,例如转换数据的格式,而无法解决整个问题。只有把它们组合在一起,才能解决大问题。

问:到底什么是管道?

:不同操作系统实现管道的方法不同,可能用存储器,也可能用临时文件。我们只要知道它从一端接收数据,在另一端发送数据就行了。

问:如果两个程序用管道相连,第二个程序要不要等第一个程序执行完后才能开始运行?

:不需要,两个程序可以同时运行,第一个程序一发出数据,第二个程序马上就可以处理。

问:为什么小工具要使用文本?

:文本是一种开放格式,程序员可以用文本编辑器来查看小工具的输出,并理解里面的内容,相比之下,二进制格式就难懂多了。

问:我能用管道连接多个程序吗?

:能啊,只要在每个程序前加上一个|就行了,一连串相连的进程就叫流水线(pipeline)。

问:当我用管道连接多个进程时,< 与 > 分别重定向哪个进程的标准输入、哪个进程的标准输出?

: < 会把文件内容发送到流水线中第一个进程的标准输入, > 会捕获流水线中最后一个进程的标准输出。

问:当我在命令行中运行bermudageo2json程序时,它们外面的括号是必需的吗?

:是的,这对括号保证了数据文件由bermuda程序的标准输入来读取。

 

bermuda工具 - 图10要点

  • 如果想完成一个不同的任务,应该另外写一个小工具。

  • 小工具应该使用标准输入和标准输出。

  • 小工具通常读写文本数据。

  • 可以用管道连接一个进程的标准输出和另一个进程的标准输入。