在终端读取未命名的管道

时间:2016-01-31 13:50:25

标签: c linux process pipe pts

Hellow。 我有非常简单的C程序。我在程序中创建管道(标准,非命名)。我可以在终端中读取现有流程的管道(带有>或者流的流吗?)。我试了但是我的命令什么也没做。我知道tkat我可以创建一个非常容易进行外部I / O的命名管道。 我有/ proc / number / fd的管道数 为什么我需要它?只是从调试(但不仅如此,我知道gdb可以看起来像管道)。当我分叉进程时,子进程继承了pts(终端)和std io / out。改变pts是可能的,但这是不好的方式。所以我将打开下一个终端并在其中传输现有的进程pipie。 有可能(而且体面,头晕的方式对我不感兴趣)或者我必须使用命名管道?

1 个答案:

答案 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