我的任务是创建一个测试程序,该程序C
读取标准输入的内容然后打印它们。
但我有一点疑问:究竟什么是标准输入?
是我在键盘上输入的吗?它是我必须阅读的文件吗?
两个都?
也是如此standard output
:它是控制台吗?一份文件?
C 标准(例如 C99 或 C11)定义了标准头的预期内容<stdio.h>
(在适当地#include
-d 之后)。请参见stdio(3)手册页。然后你有stdin
andstdout
和stderr
文件句柄(指向一些FILE
抽象数据类型的指针)。
stdin
与某些设备(例如键盘)相关的事实是特定于实现的。
您可以(但那将是不道德的和/或低效的)使用例如一个人类奴隶房间(如果您使用效率低下的有偿工人,那是不道德的)而不是使用计算机来实施 C 标准。通常,计算机通过某些操作系统的帮助为您提供 C 标准的一些实现。
您可能想知道,在您的 C 程序中,stdin
是“键盘”还是从某个“文件”重定向。不幸的是,AFAIK,没有 C99 标准的方法可以知道这一点。
正如您所提到的,stdin
,stdout
和stderr
应该在您的程序启动时可用(即在输入main
.... 之后)。因此,除非您fclose
是stdin
流媒体,否则您可以阅读它(与getchar
, scanf
, getline
, fgets
, fscanf
... 和朋友一起),无需任何事先注意(因此您不需要fopen
自己阅读)。
在 Linux 或大多数 Posix 系统上,您可以将其用作近似值isatty(STDIN_FILENO)
- 参见isatty(3)了解更多信息 - 测试“是否stdin
”是“键盘”(通过测试它是否是某个 tty)。另请参阅这个和那个。
是的,标准输入(stdin)是键盘输入。因此,可以是来自基本程序或命令行参数的用户输入形式。标准输出(stdout)是代码的输出,通常输出到终端窗口。您几乎可以在任何地方输出您的代码,例如文件、文本框、浏览器,但标准是标准输出,即终端。
希望有帮助。
通常,标准输入是键盘,标准输出是屏幕。但是,您可以使用“<”和“>”符号在命令行中重定向它。类似的命令行
dir /s > "Tree.txt"
将 dir 命令的标准输出更改为指定文件。所以所有输出都到该文件。被调用的应用程序或命令本身通常甚至不会注意到差异。
标准输出(或stdout
)是指由 Linux 和其他类 Unix 操作系统中的命令行程序(即全文本模式程序)生成的标准化数据流。
stdin 是文件描述符 0,您可以通过以下方式将文件获取到 stdin:
cat file |yourprog
#or
yourprog <file
同样适用于标准输出(文件描述符 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
和标准错误(fd 2)
yourprog 2> errlogfile
如果您有一个接收文件但不处理标准输入的程序,您可以通过这样做来使用上述格式(假设 -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)));