从 c 调用“猫”的简单方法?

新手上路,请多包涵

我正在编写一些 C++ 代码,我需要根据文件的内容预先分配一个数组。我绝对可以读取文件并以某种方式解析字符串,但是从以下 Linux 单行中找到正确的数字一定更容易:

 cat myfile.txt | grep 'Freqs ---' | sed 's/Freqs ---//g' | wc -w

在 C++ 代码中对文件使用这一单行的最佳方法是什么?

原文由 drjrm3 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 559
2 个回答

使用 popen 来自 <stdio.h>

 FILE *fp;
char buffer[BUFFER_SIZE];

fp = popen("cat myfile.txt | grep 'Freqs ---' | sed 's/Freqs ---//g' | wc -w", "r");
if (fp != NULL)
{
    while (fgets(buffer, BUFFER_SIZE, fp) != NULL)
        printf("%s", buffer);
    pclose(fp);
}

popen 的返回值是标准 I/O 流,就像 fopen 返回的一样。但是,您应该使用 pclose 而不是 fclose 来关闭流。

原文由 Kyrylo Polezhaiev 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可能想要 popen() 但这些方法并不是那么便携。

这是我在 misc/C/ 子目录中的 21 岁 (!!) 片段:

 /* edd 01.11.95 write pipe to "wc" command */

#include <stdlib.h>
#include <stdio.h>

int main() {
  FILE *pipe;

  pipe = popen("wc", "w");
  fprintf(pipe, "w\n");
  fprintf(pipe, "wc\n");
  pclose(pipe);
  return 0;
}

您也可以从管道中读取(就像从文件中读取一样),然后使用 fscanf() 来读取您的答案。

原文由 Dirk Eddelbuettel 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题