如何制作一个支持通过 shell 通过管道输入的 Linux C 程序?

问题描述 投票:0回答:1

Linux 中的某些程序可以使用如下语法从其他程序获取输入:

echo neofetch | pacman -S -

这会将“neofetch”通过管道传输到 pacman 中,而不是单个破折号,从而安装 neofetch。如何为 Linux 制作支持此语法的自己的 C 程序?

我已经知道要将管道输入输入到程序中,您可以使用标准输入,但我不知道该怎么做。我没有找到有关此主题的任何其他信息,只有有关

pipe()
的内容,这似乎不是执行此操作的方法。

c linux unix
1个回答
0
投票

任何从 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。 “管道”在两者之间传输数据。

© www.soinside.com 2019 - 2024. All rights reserved.