Hellow。 我有非常简单的C程序。我在程序中创建管道(标准,非命名)。我可以在终端中读取现有流程的管道(带有>或者流的流吗?)。我试了但是我的命令什么也没做。我知道tkat我可以创建一个非常容易进行外部I / O的命名管道。 我有/ proc / number / fd的管道数 为什么我需要它?只是从调试(但不仅如此,我知道gdb可以看起来像管道)。当我分叉进程时,子进程继承了pts(终端)和std io / out。改变pts是可能的,但这是不好的方式。所以我将打开下一个终端并在其中传输现有的进程pipie。 有可能(而且体面,头晕的方式对我不感兴趣)或者我必须使用命名管道?
答案 0 :(得分:1)
我可以在终端中读取现有流程的管道(带有>或流的流) 猫?)
是的,你可以。示例rnpit.c
:
#include <string.h>
main()
{
int pipefd[2];
pipe(pipefd);
write(pipefd[1], "pipe", strlen("pipe"));
sleep(99); // give us time to read the pipe
}
>rnpit& [1] 1077 >ll /proc/${!}/fd total 0 lrwx------ 1 armali ARNGO_res4 64 Apr 4 09:22 0 -> /dev/pts/5 lrwx------ 1 armali ARNGO_res4 64 Apr 4 09:22 1 -> /dev/pts/5 lrwx------ 1 armali ARNGO_res4 64 Apr 4 09:22 2 -> /dev/pts/5 lr-x------ 1 armali ARNGO_res4 64 Apr 4 09:22 3 -> pipe:[399466140] l-wx------ 1 armali ARNGO_res4 64 Apr 4 09:22 4 -> pipe:[399466140] >cat /proc/${!}/fd/3 pipe