我想知道如何将一个值传递给程序,如: cat somefile | MYPROGC传递cat返回值
somefile: 你好
$猫somefile | myprog
>你好
这是我试过的。
int main(int argc, char **argv) {
printf("%s", argv[1]);
return 0;
}
我怀疑这是复杂的,但我只是不知道如何。
P.S如果某些字符有点偏离,我的键盘就会断线。
我想知道如何将一个值传递给程序,如: cat somefile | MYPROGC传递cat返回值
somefile: 你好
$猫somefile | myprog
>你好
这是我试过的。
int main(int argc, char **argv) {
printf("%s", argv[1]);
return 0;
}
我怀疑这是复杂的,但我只是不知道如何。
P.S如果某些字符有点偏离,我的键盘就会断线。
如果你想你的榜样cat foo | bar
工作,你需要从标准输入读取数据,例如:
#include <stdio.h>
int main()
{
int ch;
while ((ch = getchar()) != EOF)
putchar(ch);
}
这个程序只是回应标准输入到标准输出的所有内容,所以
$ cat somefile | myprog
将会打印hello
。您不必解析argv
中的任何内容,因为周围的外壳程序已经为您解析并在程序参数和管道之类的东西之间辨别。
这里,你可能想在这里哪几个选项:
你想要的文件名“somefile”传递给你的程序。
$ myprog somefile
argv
是参数阵列 - 这样你就可以在argv[1]
somefile
访问 'somefile' 包含像 “Hello World” 的
$ cat somefile | xargs myprog
现在'的参数列表你好“和”世界“将分别在argv[1]
和argv[2]
。这类似于调用你的程序myprog hello world
。
您想要读取文件内的管道内容(文件内容)。
正如其他人所说,你只是从标准输入读数。管道有效地将前一个命令的stdout附加到以下命令的stdin。
哇,不是我想要的东西,但非常有用,它工作得很好。我从来没有真正使用过xargs,我必须仔细研究它 – d4nk1337sauce
'cat'没有“返回值”,但输出到标准输出。你可以将它传递给你的应用程序*,但它会转到标准输入*。另外,决定你正在使用哪种语言。 IO代码通常在C和C++(您最初标记的*和C#*)之间不同。 – crashmstr
@crashmstr对不起,这是为C我认为标题将足够清楚抱歉误导标签。 – d4nk1337sauce
@crashmstr嗯......在我看来'猫'确实有一个返回值...例如'cat/tmp/nonexistent 2 >>/dev/null; echo $?'给了我'1' ...当然,当您声明时,'cat'输出使用进程的标准输出通道(无论是'stdout'还是'cout'或...),尽管... – twalberg