C传入cat返回值

时间:2014-02-27 19:08:00

标签: c linux cat

我想知道如何将值传递给程序,如: cat somefile | MYPROG

somefile: 喂

$ cat somefile | MYPROG

>你好

这就是我的尝试。

int main(int argc, char **argv) {
  printf("%s", argv[1]);
  return 0;
}

我怀疑它很复杂,但我只是不知道如何。

如果某些字符稍微关闭,我的键盘会被破坏。

3 个答案:

答案 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)

您只需阅读程序的标准输入。

尝试使用cinscanf读取一行。

例如,阅读单行并使用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'
  • somefile包含一系列参数,例如“hello world”

    $ cat somefile | xargs myprog

    现在'hello'和'world'将分别位于argv[1]argv[2]。这类似于将您的程序调用为myprog hello world

  • 您想要读取文件中管道的内容(文件内容)。

    正如其他人所说,你只是从stdin读取。 Pipe有效地将前一个命令的stdout附加到以下命令的stdin。