什么是“标准输入”?

时间:2013-10-23 11:30:13

标签: c stdout stdin

我的任务是在C中创建一个测试程序,该程序读取标准输入的内容,然后打印出来。

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

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

他们两个?

同样适用于standard output:它是控制台吗?一个文件?

5 个答案:

答案 0 :(得分:9)

C标准(例如C99或C11)定义了标准<stdio.h>标题应该预期的内容(在适当#include之后 - d)。请参见stdio(3)手册页。 然后你有stdinstdoutstderr文件句柄(指向某些FILE的指针,这是一种抽象数据类型)。

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

你可以(但这是不道德的和/或效率低下的)用例如C标准来实现。一个人类奴隶的房间(这是不道德的,如果你使用效率低下的有偿工人),而不是使用电脑。通常,计算机通过某些operating system的帮助为您提供C标准的一些实现。

您可能想知道,在您的C程序中,如果stdin是“键盘”还是从某个“文件”重定向。不幸的是,AFAIK,没有C99标准的方式来了解它。

正如您所说,stdinstdoutstderr应该在您启动时的程序中可用(即在输入main ....后)。因此,除非您fclose stdin流,否则您可以阅读它(getcharscanfgetlinefgets,{{1没有任何事先的关心(所以你不需要自己fscanf)。

在Linux或大多数Posix系统上,您可以使用近似fopen - 请参阅isatty(3)了解更多信息 - 测试isatty(STDIN_FILENO)“是否为”键盘“(通过测试是否这是一些tty)。另见this&amp; that

答案 1 :(得分:3)

是的,标准输入(stdin)是从键盘输入的输入。因此,可以是来自基本程序或命令行参数的用户输入的形式。标准输出(stdout)是代码的输出,通常是终端窗口。您可以将代码输出到几乎任何地方,即文件,文本框,浏览器,但标准是作为终端的标准输出。

希望有所帮助。

答案 2 :(得分:3)

通常,标准输入是键盘和标准输出屏幕。但是,您可以使用“&lt;”在命令行中重定向它。和“&gt;”符号。像

这样的命令行
dir /s > "Tree.txt" 

会将dir命令的标准输出更改为指定的文件。所以所有输出都转到该文件。被调用的应用程序或命令本身通常不会注意到差异。

答案 3 :(得分:1)

standard output(或stdout)是指由Linux和其他类Unix操作系统中的命令行程序(即全文模式程序)生成的标准化数据流。

答案 4 :(得分:1)

stdin是文件描述符0,你可以通过以下方式获取文件到stdin:

cat file |yourprog
#or
yourprog <file

同样适用于stdout(文件描述符1)

yourprog | someotherprog #pipe your stdout to the stdin of another program
yourprog > somefile #save stdout to a file
yourprog >> somefile #append stdout to a file

和stderr(fd 2)

yourprog 2> errlogfile

如果你有一个程序接受一个文件但不处理stdin,你可以通过这样做来使用上述格式(假设输入文件参数为-f) myprog -f /dev/stdin

//and a horrible example of how not to read from stdin and write to stdout
char buf[4096];
while(write(1,buf,read(0,buf,4096)));