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

标签 c file-io stdout

经过多次搜索和困惑,我不得不问......

我有一个正在运行的二进制文件,它在无限循环中不断地写入标准输出。

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

我们称之为生成器。

生成器将其 PID(通过使用 getpid())发送到另一个称为收集器的二进制文件。

一旦收集器收到 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;
}

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

最佳答案

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

在我看来,您想要在进程之间建立一个管道。

关于c - 从 C 中正在运行的进程的 stdout fd 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22113312/

相关文章:

c - 使用 memcpy 从数组转换为 int

java - 使用流通过 Spring MVC Controller 下载文件

在写入文件之前检查文件是否存在,然后要求用 POSIX 在 C 中覆盖

windows - 在重定向的标准输出管道上禁用缓冲(Win32 API、C++)

c - 使用 dup2 重定向 stdin 和 stdout

c - 如何生成 8 个字节的数组,每个字节都是 C 中的随机数

c - 具有 passByName 参数传递范例的函数的输出

c - 如何使用cloudamqp以C语言对paho mqtt订户客户端进行身份验证?

java - 存储文件跳过的字符

ruby - 如何在 ruby​​ 中使用反引号开始子进程的连续输出