什么是"标准输入"?

Kio*_*arv 9 c stdin stdout

我的任务是创建一个测试程序C,读取标准输入的内容,然后打印它们.

但我有点怀疑:什么是标准输入

这是我在键盘上键入的内容吗?这是我必须阅读的文件吗?

他们都?

同样的问题是standard output:它是控制台吗?一份文件?

Bas*_*tch 10

C标准(例如C99或C11)定义了标准<stdio.h>头部应该预期的内容(在适当地使用之后#include).请参见stdio(3)手册页.然后,你有stdinstdoutstderr文件句柄(指点一下FILE这是一个抽象数据类型).

stdin与某些设备(例如键盘)相关的事实是特定于实现的.

你可以(但这是不道德和/或效率低下)实施C标准,例如人类奴隶的房间(如果你使用效率低下的付费工人,这是不道德的),而不是使用计算机.通常,计算机通过某些操作系统的帮助为您提供一些C标准的实现.

你可能想知道,在你的C程序中,如果stdin是"键盘"或从某个"文件"重定向.不幸的是,AFAIK,没有C99标准的方式来了解这一点.

正如你提到的,stdin,stdout并且stderr应该在你的程序可在启动时(即进入后main....).因此,除非你fclosestdin数据流,你可以读它(用getchar,scanf,getline,fgets,fscanf没有任何事先护理(所以你不需要......和朋友)fopen它自己).

在Linux或大多数Posix系统上,您可以使用近似值isatty(STDIN_FILENO)- 请参阅isatty(3)以获取更多信息 - 测试stdin"是""键盘"(通过测试它是否为某个tty).另见这个那个.