免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3849 | 回复: 7
打印 上一主题 下一主题

为什么write函数中文件描述用0或1都是向屏幕输出 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-13 00:32 |只看该作者 |倒序浏览
我用的是sco unix系统
write(STDIN_FILENO, "1234", 4);
write(STDOUT_FILENO, "1234", 4);
为什么都是向屏幕输出呢?

[ 本帖最后由 ablised 于 2009-2-13 00:43 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-02-13 00:59 |只看该作者
如果不往屏幕输出,那你想往哪里输出呢?

论坛徽章:
0
3 [报告]
发表于 2009-02-13 01:21 |只看该作者

回复 #1 ablised 的帖子

这两描述符实际上都指向的是屏幕这个终端。

论坛徽章:
0
4 [报告]
发表于 2009-02-13 01:30 |只看该作者
echo 1234 | dd of=/dev/stdin


你试试这个。再来对比:

echo 1234 | dd of=/dev/stdout

论坛徽章:
0
5 [报告]
发表于 2009-02-13 01:47 |只看该作者
标准输出 和 标准错误输出 ?
历史上,中世纪的 UNIX 时候,那个时候无比黑暗,终端分好几种...自己查吧,我不是中世纪的人,不知道,也是听村里的老人说的。

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
6 [报告]
发表于 2009-02-13 09:24 |只看该作者
翻书。。规定。

论坛徽章:
0
7 [报告]
发表于 2009-02-13 09:45 |只看该作者

回复 #1 ablised 的帖子

*nix操作系统在启动的时候,最早的那个进程会把/dev/tty...打开,并且这是第一个打开的文件,那么它的文件描述符自然是0,随后把这个文件描述符用dup复制两份,就是1和2,这样它随后fork出来的进程就继承了这些文件描述符。你当然也可以重新dup,然后用新的句柄作为屏幕输出。stevens的《UNIX高级环境编程》很好,可以看看。

论坛徽章:
0
8 [报告]
发表于 2009-02-13 10:07 |只看该作者
内核运行第一个用户进程之前的几句代码(在 init/main.c中),大概是这样的:


  1. open("/dev/console", O_RDWR, 0);
  2. dup(0);
  3. dup(0);
  4. execve("/sbin/init",argv_init,envp_init);
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP