14

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

但我有一点疑问:究竟什么是标准输入

是我在键盘上输入的吗?它是我必须阅读的文件吗?

两个都?

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

4

5 回答 5

11

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

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

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

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

正如您所提到的,stdin,stdoutstderr应该在您的程序启动时可用(即在输入main.... 之后)。因此,除非您fclosestdin流媒体,否则您可以阅读它(与getchar, scanf, getline, fgets, fscanf... 和朋友一起),无需任何事先注意(因此您不需要fopen自己阅读)。

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

于 2013-10-23T11:56:10.867 回答
3

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

希望有帮助。

于 2013-10-23T11:34:13.777 回答
3

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

dir /s > "Tree.txt" 

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

于 2013-10-23T11:34:44.937 回答
1

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

于 2013-10-23T11:37:05.947 回答
1

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)));
于 2013-10-23T11:52:40.703 回答