我的任务是在C
中创建一个测试程序,该程序读取标准输入的内容,然后打印出来。
但我有点怀疑:什么是标准输入?
这是我在键盘上键入的内容吗?这是我必须阅读的文件吗?
他们两个?
同样适用于standard output
:它是控制台吗?一个文件?
答案 0 :(得分:9)
C标准(例如C99或C11)定义了标准<stdio.h>
标题应该预期的内容(在适当#include
之后 - d)。请参见stdio(3)手册页。
然后你有stdin
和stdout
和stderr
文件句柄(指向某些FILE
的指针,这是一种抽象数据类型)。
stdin
与某些设备(例如键盘)相关的事实是特定于实现的。
你可以(但这是不道德的和/或效率低下的)用例如C标准来实现。一个人类奴隶的房间(这是不道德的,如果你使用效率低下的有偿工人),而不是使用电脑。通常,计算机通过某些operating system的帮助为您提供C标准的一些实现。
您可能想知道,在您的C程序中,如果stdin
是“键盘”还是从某个“文件”重定向。不幸的是,AFAIK,没有C99标准的方式来了解它。
正如您所说,stdin
,stdout
和stderr
应该在您启动时的程序中可用(即在输入main
....后)。因此,除非您fclose
stdin
流,否则您可以阅读它(getchar
,scanf
,getline
,fgets
,{{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)));