Linux 中的某些程序可以使用如下语法从其他程序获取输入:
echo neofetch | pacman -S -
这会将“neofetch”通过管道传输到 pacman 中,而不是单个破折号,从而安装 neofetch。如何为 Linux 制作支持此语法的自己的 C 程序?
我已经知道要将管道输入输入到程序中,您可以使用标准输入,但我不知道该怎么做。我没有找到有关此主题的任何其他信息,只有有关
pipe()
的内容,这似乎不是执行此操作的方法。
任何从 stdin 读取的函数都将从该管道读取。这就是 stdin 的要点。例如,该程序将从 stdin 一次读取一个字符并将其写入 stdout。使用
|
,stdout
的 echo
将附加到该程序的 stdin:
int main() {
char c;
while ((c = getchar()) != EOF) {
putchar(c);
}
return 0;
}
任何可以读取 stdin (fileno 0) 的东西都可以这样工作。
read
、scanf
等。例如,从 stdin 以 100 字节为单位使用 fread
并将它们写入 stdout:
int main() {
char buffer[100];
size_t bytesRead;
while ((bytesRead = fread(buffer, 1, 100, stdin)) > 0) {
fwrite(buffer, 1, bytesRead, stdout);
}
return 0;
}
Unix 的一个核心设计理念是“一切皆文件”。所以管道左侧的输出是一个“文件”(假文件),称为stdout,右侧也是一样的,称为stdin。 “管道”在两者之间传输数据。