求解释stdin,stdout,stderr

sunsweet_DK 2011-12-11 10:16:24
它们都是指向FILE结构的指针,FILE结构里有文件描述符,默认stdin文件描述符是0,stdout是1,stderr是2。
本以为它们指向不同的文件,后来发现不是的
lrwxrwxrwx 1 root root 15 12-01 14:09 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 12-01 14:09 /dev/stdout -> /proc/self/fd/1
lrwxrwxrwx 1 root root 15 12-01 14:09 /dev/stderr -> /proc/self/fd/2
lrwx------ 1 root root 64 12-11 09:55 /proc/self/fd/0 -> /dev/pts/0
lrwx------ 1 root root 64 12-11 09:56 /proc/self/fd/1 -> /dev/pts/0
lrwx------ 1 root root 64 12-11 09:56 /proc/self/fd/2 -> /dev/pts/0
crw--w---- 1 root tty 136, 0 12-11 09:56 /dev/pts/0


它们都指向同一个字符设备文件,这样的话我们fprintf(stdin,"hello world");不就也可以屏幕输出了吗?
所以我试了试,不可以,不知道为什么?
...全文
194 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunsweet_DK 2011-12-11
  • 打赏
  • 举报
回复
这个和底层的东西关系很大吧,设备文件是啥啊
qwer_boo 2011-12-11
  • 打赏
  • 举报
回复
能通过这个就说他们三个是指向同一个文件吗?
askandstudy 2011-12-11
  • 打赏
  • 举报
回复
不好意思,我是c“旁观者”,也可能是>符号做过处理了,就当我没说。
askandstudy 2011-12-11
  • 打赏
  • 举报
回复
[root@RHEL6A ~]# echo 'a' > /dev/stdout
a
[root@RHEL6A ~]# echo 'a' > /dev/stdin
a
[root@RHEL6A ~]# echo 'a' > /dev/stderr
a

echo.c里用的好像是putchar?是不是跟各自的实现方式有关?
deep_pro 2011-12-11
  • 打赏
  • 举报
回复
/dev/pts/0 是linux虚拟终端的设备节点
虽然他们3都指向/dev/pts/0
但是/proc/不是一个普通的文件系统,/proc文件系统里的每一个文件的读写都是内核里专门函数实现的专有功能
不能用普通目录的常理推断

我猜测/proc/self/fd/0
/proc/self/fd/1 都是只能写或者只能读,不像普通文件fd那样既能读也能写

同求高人解答
sunsweet_DK 2011-12-11
  • 打赏
  • 举报
回复
难道和fprintf的实现有关吗?
sunsweet_DK 2011-12-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 deep_pro 的回复:]

最好是fprintf(stdout,"hello world\n");
[/Quote]我知道,这样一定可以,但是stdin和stdout确实指向了同一个文件,fprintf(stdin,"hello world"); 为什么不可以呢
deep_pro 2011-12-11
  • 打赏
  • 举报
回复
最好是fprintf(stdout,"hello world\n");
deep_pro 2011-12-11
  • 打赏
  • 举报
回复
fprintf(stdin,"hello world"); 改成fprintf(stdout,"hello world");

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧