从C中正在运行的进程的stdout fd中读取

时间:2014-03-01 10:47:07

标签: c file-io stdout

经过多次搜索和混淆,我不得不问....

我有一个二进制运行,它在无限循环中永远写入stdout。

fprintf(stdout,"%s\n",msg);

让我们称之为发电机。

生成器将其PID(使用getpid())发送到另一个名为collector的二进制文件。

收集器收到PID后立即访问procfs

#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>

#define MAX_BUF 1024

int main()
{
    int fd;
    char *generator_fd = "/proc/17163/fd/1"; //This is the process ID sent by generator
    char buf[MAX_BUF];

    fd = open(generator_fd, O_RDONLY);
    read(fd, buf, MAX_BUF);
    printf("Received: %s\n", buf);
    close(fd);
    return 0;
}

但它什么都不打印:(。任何人都可以帮忙

2 个答案:

答案 0 :(得分:0)

文件描述符是相关进程的本地描述符。您无法读取属于其他进程的fd。 /proc/NNNN/fd/NN中的内容是打开的文件/设备的符号链接。如果这是(例如)tty,打开它可能会失败,但肯定不会给你生成器写入tty的内容。

听起来我觉得你想要在这些过程之间插管。

答案 1 :(得分:0)

感谢大家的信息。我将使用命名管道