经过多次搜索和困惑,我不得不问......
我有一个正在运行的二进制文件,它在无限循环中不断地写入标准输出。
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/