2016-01-31 3 views
1

Ci-dessous. J'ai un programme C très simple. Je crée un tuyau dans le programme (standard, non nommé). Puis-je lire le tuyau du processus existant dans le terminal (flux avec> ou chat?). Je l'essaie mais ma commande ne fait rien. Je sais que je peux créer un tuyau nommé qui est très facile pour les E/S externes. J'ai le numéro de pipe pour/proc/nombre/fd Pourquoi j'en ai besoin? Juste à partir de déboguer (mais pas seulement, je sais que gdb peut regarder pipe). Quand je fork, les enfants héritent de pts (terminal) et std io/out. Changer de pts est possible mais c'est mauvais. Donc, je vais ouvrir le prochain terminal et streamer le processus pipie existant dedans. C'est possible (et décent, le vertige ne m'intéresse pas) ou je dois utiliser le tuyau nommé?Lire le tuyau non armé dans le terminal

Répondre

1

Puis-je lire tuyau de processus existant dans le terminal (flux avec> ou chat?)

Oui, vous pouvez. Exemple 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