我想知道如何将值传递给程序,如: cat somefile | MYPROG
somefile: 喂
$ cat somefile | MYPROG
>你好
这就是我的尝试。
int main(int argc, char **argv) {
printf("%s", argv[1]);
return 0;
}
我怀疑它很复杂,但我只是不知道如何。
如果某些字符稍微关闭,我的键盘会被破坏。
答案 0 :(得分:5)
如果您希望示例cat foo | bar
起作用,则需要从标准输入中读取数据,例如:
#include <stdio.h>
int main()
{
int ch;
while ( (ch = getchar()) != EOF )
putchar(ch);
}
这个程序只是回应标准输出的所有内容,所以
$ cat somefile | myprog
然后将打印hello
。您不必解析argv
中的任何内容,因为周围的shell已经为您解析了这个并在程序参数和管道之间识别。
答案 1 :(得分:3)
您只需阅读程序的标准输入。
尝试使用cin
或scanf
读取一行。
例如,阅读单行并使用cin
打印出来:
#include <iostream>
int main()
{
std::string s;
std::getline(std::cin, s);
std::cout << s << std::endl;
return 0;
}
答案 2 :(得分:2)
以下是您可能需要的几个选项:
您想将文件名'somefile'传递给您的程序。
$ myprog somefile
argv
是参数数组 - 因此您可以在argv[1]
somefile
包含一系列参数,例如“hello world”
$ cat somefile | xargs myprog
现在'hello'和'world'将分别位于argv[1]
和argv[2]
。这类似于将您的程序调用为myprog hello world
。
您想要读取文件中管道的内容(文件内容)。
正如其他人所说,你只是从stdin读取。 Pipe有效地将前一个命令的stdout附加到以下命令的stdin。