标准输入输出问题!

xjl999 2004-05-07 01:36:55
1.我知道在console程序中系统自定义了标准输入(stdin),标准输出(stdout),标准出错(stderr),那么系统是如何打开这些标准设备文件的呢,也就是
stdin = fopen(?,"r")中?应该是什么呢?,在windows下设备文件如何表示?
2.当我调用scanf("%c",a)时,应该是从标准输入中读取一个字符,那么当我运行程序时会有光标等着我去输入,我输入的内容在屏幕上显示出来了,那么负责显示的是什么程序的事呢?,我又没有显式地调用printf,是scanf做的吗?好象不像。
3.在windows图形界面下还有标准输入和输出的概念吗?有的话又是什么呢?什么是标准输入,什么是标准输出?
小弟有些困惑,请高手指教!!
...全文
249 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cngdzhang 2004-05-07
  • 打赏
  • 举报
回复
1
看一下stdio.h中对stdin等的定义,实际上,它们还是一个宏
至于__getStream(0),实际上是一个缓冲区,这是操作系统内部实现的
#define stdin __getStream(0)
#define stdout __getStream(1)
#define stderr __getStream(2)
#define stdaux __getStream(3)
#define stdprn __getStream(4)

2
scanf("%c",a)时,屏幕的显示是输入的时候完成的
在汇编中实现是有对应的实现的,(你查一下汇编的功能号,有的)
一种是带回显的(输入了在屏幕上显示出来),C语言中的是 getche
一种是不带回显的(输入了屏幕上不显示),C语言中的是 getch

3
Windows是基于事件驱动的,已经不是查询式的了,已经弱化了输入输出的概念
下面是一些事件(消息)

WM_CHAR
WM_LBUTTONDOWN
WM_PAINT



RookieStar 2004-05-07
  • 打赏
  • 举报
回复
1。stdin默认与键盘连接,应该不需要与什么设备文件相连。(你的意思我懂了,不过具体是否与什么设备文件相关我也不清楚)。

2。既然你已经重定向了,那么键盘就不是默认的连接设备了。而“回显”是与键盘和输入缓冲相关的概念。你重定向后,连接的是a.txt文件,与“回显”就没有关系了。

我发表的是个人看法,仅供参考:)
xjl999 2004-05-07
  • 打赏
  • 举报
回复
to: RookieStar
>1。你不是包含了iostream.h这个文件了吗? stdin/cin等就是iostream库中定义的全局>istream对象啊。
我知道定义了这些全局变量啊,但是这些变量是通过打开什么设备文件来生成的呢?
就像我可以打开一个文本文件返回一个文本流变量fp,那stdin打开什么呢?

>2。操作系统一般将标准输入通道与键盘连接,scanf只不过多了“回显”这一功能罢了,像>getch就不回显了。
我把stdin做了重定向,stdin = freopen("a.txt","r"),然后再scanf("%c",&a),printf("%c",a),能读到变量a,但只显示一次变量a,是不是说明scanf没有回显功能呢?
RookieStar 2004-05-07
  • 打赏
  • 举报
回复
1。你不是包含了iostream.h这个文件了吗? stdin/cin等就是iostream库中定义的全局istream对象啊。

2。操作系统一般将标准输入通道与键盘连接,scanf只不过多了“回显”这一功能罢了,像getch就不回显了。

3。在windows图形界面下不需要标准输入和输出,因为它已经不是console所关联的文本格式了,图形界面的显示是GDI的工作,与标准输入输出无关,如果说硬要找一个所谓的标准输出,你可以试试TextOut,不过它是API函数哦。至于标准输入,那就更虚无缥缈了,键盘/鼠标/手柄,你选择哪个做标准呢?

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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