Linux-关于C语言stderr文件

发布于 2016-12-05 13:56:25 字数 157 浏览 1557 评论 4

我知道Linux 的思想是“一切皆文件”,对stdin,和stdout文件的存在表示可以接受,但是为什么要单独提出一个stderr,这个东西也是把信息反映到显示器上啊,和stdout没什么区别吧?我们都可以通过fpritnf();将错误信息输出,那为什么还要提出这么个概念呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

归属感 2017-06-23 02:07:21

这个很简单

因为效率关系 文件流都采用缓存形式 就是当buf到达一定程度 或者触发某个事件 一次写入到终端 文件也是如此
而stderr 是不允许缓存策略的 所以 在出现错误 我们可以第一时间看到错误 就是这个原因 才有了 stderr

想挽留 2017-05-14 16:49:31

我不扯专业发面的给你说,因为楼上已经说的够详细了,我提供给你另外一种思维方式:信息的交流分两种,一种叫做输入(in),一种叫做输出(out),可是我们还要考虑一点,正常(normal)和出错(error)的两种情况,如果这样想到话就会出现四种情况:normal in,normal out,error in,error out。但是error in和error out这两种情况处理可以整合在一起考虑,所以最后就有了三种stdin,stdout,stderr。

泛泛之交 2017-04-30 08:17:47

默认情况下stderr也是输出到显示器上,但是重定向之后就不是了。通过重定向,就可以把正常的输出(到stdout)和错误信息(到stderr)分开,这就可以分开处理。例如可以把stdout重定向到一个文件,屏幕上就只剩stderr里的错误信息。同理可以把stderr重定向,无视掉错误信息。

这在连接管道的时候很有用,例如下面的命令,计算当前目录下*.c文件的个数:

find . -name "*.c" | wc -l

刚好这里有个目录我们没有权限访问,所以find的输出这样的错误信息:

find: ./spec: Permission denied

find把错误信息输出到stderr,而正常的输出就被重定向到wc的stdin,所以wc不会计算错误信息所占的行数。

总的来说,只有在通过管道和其他程序通信时,stderr 的意义才明显。

夜无邪 2016-12-05 22:12:05

1). "stderr,这个东西也是把信息反映到显示器上啊" -- 用户可以把stderr重定向, 比如某个文件. 这样stderr和stdout可以分开处理.
http://www.jstorimer.com/blogs/workingwithcode/7766119-when-to-use-stderr-instead-of-stdout

2). unix实现中, stderr默认不会被缓存, 保证它会被尽快的显示出来; stdout如果连终端, 默认line buffer, 否则全buffer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文