什么是“;标准输入”;?
我的任务是在什么是“;标准输入”;?,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)));