【问题标题】:Lines printed by a child process to stdout子进程打印到标准输出的行
【发布时间】:2013-12-24 17:07:34
【问题描述】:

如何知道 C 中子进程打印的行数。 更好地解释场景, 我有一个 c 程序,我将在其中创建一个进程。所以我想知道子进程打印到标准输出的行数。

【问题讨论】:

  • @MarcB 但是如何在 C 中实现相同的功能??
  • 在父级中捕获孩子的stdout,还是包装printf()并添加一个计数器?
  • 也许对子程序进行编程以计算它打印的行数并通过 IPC 机制将该数字传回给父程序?
  • @MarcB 捕获孩子的标准输出?我怎样才能做到这一点 。你能更具体一点吗?
  • @MultimediaMike 我正在尝试创建一个像程序一样的小型沙箱作为项目。所以父程序(即沙箱)必须自己找到子进程的行为。

标签: c process operating-system child-process


【解决方案1】:

如果 ss 是包含 12 的文件,您可以覆盖标准输入:

#include <stdio.h>

int main(int argc, char const *argv[])
{
    printf("%p\n", stdin);
    FILE * fd = fopen("ss", "r+");
    printf("%p\n", fd);
    stdin = fd;
    printf("%p\n", stdin);
    int a = 0;
    scanf("%d", &a);
    printf("%d\n", a);
    return 0;
}

输出:

➜ ./a
0x7fff70ab9350
0x7fff70abf280
0x7fff70abf280
12

【讨论】:

    【解决方案2】:

    捕获孩子的标准输出?我怎样才能做到这一点 。你能说得更具体点吗?

    #include <stdio.h>
    main()
    {
        FILE *fp = popen("ls -1", "r");
        int c, l = 0;
        do if (c = fgetc(fp), c == '\n') ++l; while (c != EOF);
        fclose(fp);
        printf("The child process printed %d lines.\n", l);
    }
    

    【讨论】:

      猜你喜欢
      • 2012-09-29
      • 2018-02-25
      • 1970-01-01
      • 2015-04-08
      • 1970-01-01
      • 1970-01-01
      • 2013-06-29
      • 2021-02-06
      • 1970-01-01
      相关资源
      最近更新 更多