经过多次搜索和混淆,我不得不问....
我有一个二进制运行,它在无限循环中永远写入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;
}
但它什么都不打印:(。任何人都可以帮忙
答案 0 :(得分:0)
文件描述符是相关进程的本地描述符。您无法读取属于其他进程的fd。 /proc/NNNN/fd/NN
中的内容是打开的文件/设备的符号链接。如果这是(例如)tty,打开它可能会失败,但肯定不会给你生成器写入tty的内容。
听起来我觉得你想要在这些过程之间插管。
答案 1 :(得分:0)
感谢大家的信息。我将使用命名管道