什么是“标准输入”?

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

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

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

他们都?

standard output也是如此:它是控制台吗? 一份文件?

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

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

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

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

正如您所提到的, stdinstdoutstderr应该在启动时在您的程序中可用(即在进入main ….)。 因此,除非您fclose stdin流,否则您可以在没有任何事先注意的情况下阅读它(使用getcharscanfgetlinefgetsfscanf ……和朋友)(因此您不需要自己fopen它)。

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

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

希望有所帮助。

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

 dir /s > "Tree.txt" 

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

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

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

 cat file |yourprog #or yourprog  

同样对于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,你可以通过这样做使用上述格式(假设输入文件参数为myprog -f /dev/stdinmyprog -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)));