如何使用此特定命令从 stdin 读取?

How can I read from stdin with this specific command?

我是 C 的新手,我想知道我的程序需要什么,以便它能够从给定的 test.stdin 文件中读取,当将此命令写入控制台时:

cat test.stdin | ./myprogram | tee myoutput.stdout

?

所以我猜 test.stdin 是计算机上的某个文件,它为我的程序提供 data/input,然后我的程序正在处理该数据并将结果写入文件 [=22] =] 这也在我的电脑上的某个地方。

我的程序需要什么才能使上面的命令正常工作?我需要对 stdin 中的数据进行一些计算,但我不知道如何开始,如何读取并使命令适用于我的程序。

正如@MikeCAT 所说,您可以只阅读 stdin,但作为初学者,您可能不知道该怎么做。您可以使用 getcharfgetsscanf 等。没有必要“打开”stdin,因为它对于任何 C 程序都是默认打开的,stdoutstderr 也是如此。如果您在 Linux 上 运行,则可以通过 man... 即 man getchar 了解各种输入功能的用法。如果你不在 Linux,你可以做一个 google search.

在 C 中,默认从“标准输入”或 stdin 读取。这是最简单的事情。您不必明确打开任何东西; stdin 总是在您的 main 函数被调用之前为您打开(连同 stdoutstderr)。

您可以使用各种标准库函数阅读 stdin。最常见的是 getcharscanf。并且,重复一遍:如果愿意,您可以在 main 的第一行开始调用它们。他们马上工作;不需要任何设置步骤。

getchar 读取一个字符。
scanf 读作“格式化输入”,尽管这个功能充满了问题和陷阱,几乎不值得使用。

stdin 读取一行,该函数曾经是 gets,尽管它有一个致命的问题并且已从语言中删除。今天,要从 stdin 中读取一行,一种方法是使用 fgets 函数,它实际上可以从任何流中读取行,因此您必须显式地将它传递给 stdin 作为它的 fp 参数。

stdout(标准输出)是程序可以发送到的地方 信息(例如文本)。程序永远不知道信息在哪里 它发送到标准输出正在进行。这些信息可以去一个 打印机、普通文件或终端(屏幕)。默认情况下 shell 将命令的标准输出定向到终端(屏幕)并描述 如何使 shell 将此输出重定向到另一个文件。

stdin(标准输入)是程序获取信息的地方;经过 默认情况下,shell 指示来自键盘的标准输入。 与标准输出一样,程序永远不会“知道”信息在哪里 来自。以下部分解释了如何重定向标准输入 到命令,因此它来自普通文件而不是来自 键盘。

您可以使 shell 重定向标准输入或标准输出 通过将输入或输出与命令或文件相关联的任何命令 除了代表键盘或 终端(屏幕)。

cat 实用程序提供了键盘和 终端(屏幕)功能作为标准输入和标准输出, 分别。当您 运行 cat 时,它会将文件复制到标准输出。 因为 shell 将标准输出定向到屏幕,所以 cat 显示 文件在屏幕上。

cat 写入标准输出,不一定是 终端, 即使 cat 是作为交互式命令的一部分键入的 shell。如果 你真的需要一些东西来写终端,即使是标准的 输出被重定向,这不是那么容易(你需要指定哪个 终端,如果命令是从 一个脚本)