用 fprintf() 修改代码吧
只要稍作修改,就可以在标准错误中打印错误消息。
现在程序和刚刚一样工作,只是错误消息会显示在标准错误中,而非标准输出中。
运行代码,看看会发生什么。
试驾
重新编译程序,再次运行错误的 GPS 数据,结果如下:
妙哉,这次就算把标准输出重定向到 output.json 文件,也可以在屏幕上看到错误消息。
创建标准错误的初衷是为了区分普通输出和错误消息。但是别忘了,
stderr 和 stdout 不过是两个输出流罢了,完全可以用它们做其他事情。
下面就来试试你新学的两个技能:标准输入和标准错误。
要点
printf() 函数把数据发送到标准输出。
默认情况下,标准输出会发送到显示器。
可以在命令行中用>将标准输出重定向到文件。
scanf() 从标准输入读取数据。
默认情况下,标准输入会从键盘读取数据。
可以在命令行中用<将标准输入重定向到文件。
标准错误专门用来输出错误消息。
可以用 2> 重定向标准错误。
最高机密
毫无疑问,下面这个程序可以用来传送机密消息:
我们截获了一个叫 secret.txt 的文件,还有一张小纸片,上面写着指令:
你负责解码这两条机密消息,请把答案写在下面。
最高机密解答
毫无疑问,下面这个程序可以用来传送机密消息:
我们截获了一个叫 secret.txt 的文件,还有一张小纸片,上面写着指令:
你负责解码这两条机密消息。
操作系统零距离
本周访谈主题:
一视同仁
Head First:操作系统,很高兴你抽空参加我们今天的节目。
O/S:分配时间是我的强项。
Head First:你不打算透露你的真实姓名,对吗?
O/S:是的,叫我 O/S 就行了。
Head First:你属于哪一类操作系统?这个问题你介意回答吗?
O/S:大家总是在争论哪个操作系统好,但对 C 程序来说,其实我们都差不多。
Head First:是因为有 C 语言标准库的缘故吗?
O/S:嗯,C 语言基本原理是放之四海皆准的。我常说“只要灯一关,我们都一个样”,你明白我在说什么吗?
Head First:当然。现在是你负责把程序载入存储器的吗?
O/S:没错,我把程序变成进程。
Head First:这是很重要的工作,对吗?
O/S:当然啦,你可不能把程序扔到存储器中,让它自生自灭,还有一大堆配置工作要做。我需要为程序分配存储器,把程序和标准数据流连到一起,这样程序才能使用显示器和键盘。
Head First:就像你对 geo2json 做的那样吗?
O/S:它很傻。
Head First:傻?
O/S:不是说它真傻,而是作为一个工具,它操作起来很简单,好比一台傻瓜相机。
Head First:原来是这样,你会用很多工具吗?
O/S:这其实就是生活,不是吗?要看操作系统,类 Unix 的操作系统为完成工作会大量使用工具,Windows 用的少一些,但也不能没有这些小工具。
Head First:可以创建很多小工具并让它们在一起工作,这是一种哲学,对吗?
O/S:这是一种生活方式。有时当你要解决一个大问题,把它分解成一组更简单的任务,解决起来更容易。
Head First:然后为每个任务都写一个工具?
O/S:没错,然后操作系统,也就是我,负责把这些工具连接起来。
Head First:这种方法有什么好处?
O/S:首先是简单,小程序更容易测试。其次,一旦你写了一个工具,就可以在多个项目中使用。
Head First:就没有什么缺点吗?
O/S:老实说,小工具长得不好看,它们通常在命令行下工作,因此没有吸引眼球的界面。
Head First:这个影响大吗?
O/S:不大,无论是桌面应用程序还是网站,只要你用小工具实现了程序的核心部分,就可以把它们连接到一个好看的界面上。嘿,时间到了,不好意思了,我要抢占你,让其他进程上台。
Head First:好的,谢谢你,O/S。非常高兴……呼……呼……呼……
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论