Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是“;标准输入”;?_C_Stdout_Stdin - Fatal编程技术网

什么是“;标准输入”;?

什么是“;标准输入”;?,c,stdout,stdin,C,Stdout,Stdin,我的任务是在C中创建一个测试程序,读取标准输入的内容,然后打印出来 但我有点怀疑:什么是标准输入 是我在键盘上输入的吗?这是我必须读的文件吗 他们两个 标准输出也是如此:它是控制台吗?文件?是的,标准输入(stdin)是从键盘输入的。因此,可以是来自基本程序或命令行参数的用户输入形式。标准输出(stdout)是代码的输出,通常输出到终端窗口。您几乎可以将代码输出到任何地方,例如文件、文本框、浏览器,但标准是作为终端的stdout 希望有帮助。通常,标准输入是键盘,标准输出是屏幕。但是,您可以在命

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

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

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

他们两个

标准输出也是如此:它是控制台吗?文件?

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


希望有帮助。

通常,标准输入是键盘,标准输出是屏幕。但是,您可以在命令行中使用“”符号重定向此项。像这样的命令行

dir /s > "Tree.txt" 

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

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

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

cat file |yourprog
#or
yourprog <file
和标准差(fd 2)

如果您有一个接受文件但不处理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)));
C标准(例如C99或C11)定义了标准
标题的预期内容(在适当地
#包括
-d之后)。请参阅手册页。
然后有
stdin
stdout
stderr
文件句柄(指向某个
文件
的指针,这是一种抽象数据类型)

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

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

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

正如您所提到的,
stdin
stdout
stderr
应该在启动时(即在输入
main
之后)在您的程序中可用。因此,除非你
fclose
stdin
流,否则你可以阅读它(使用
getchar
scanf
getline
fgets
fscanf
…和朋友),而无需任何事先关心(因此你不需要自己打开它)


在Linux或大多数Posix系统上,您可以使用近似值
isatty(STDIN\u FILENO)
-有关更多信息,请参阅-测试
STDIN
“是否是“键盘”(通过测试它是否是某个tty)。另请参阅&。

可能会有所帮助。@devnull谢谢您的链接。但是,
除非重新定向,否则输入应该来自启动程序的键盘。已重定向的
。。。这意味着输入可以来自文件?在C中,标准输入是
stdin
,标准输出是
stdout
,两者都在
中定义;它们是“键盘”或“文件”这一事实是无关紧要的…@BasileStarynkevitch,但它们不应该被区别对待吗?如果输入来自某个文件,是否应首先打开该文件?示例的可能副本是特定于Windows的。在Posix或Linux系统上,它应该是
ls-R>Tree.txt
Right,但语法在其他方面是相同的(至少在简单的情况下是相同的)Aha。在这个重定向中,它意味着
dir
的输出字符串被写入文件?是的,完全正确。试试看。
在程序启动时,三个文本流是预定义的,不需要显式打开
OK。因此,无论是文件还是键盘输入,我都可以立即读取stdin,而不必检查它是否已打开,对吗?在标准C中,没有文件描述符这样的概念,只有流。
yourprog 2> errlogfile
//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)));