pipe olvasása (megoldva)

Fórumok

Ha egy pipe sorba teszem a programot, akkor a stdin-ről tudom olvasni az előző kimenetét, de ha nincs semmi az sdtin-en akkor a billentyűzetről vár karaktereket. Azt hogy tudom megadni, hogy csak a pipe esetén olvassa az stdin-t?

Hozzászólások

> hogy csak a pipe esetén olvassa az stdin-t?

Gondolom ez ugyanaz, mint hogy terminál esetén ne olvassa az stdin-t.

http://linux.die.net/man/3/isatty


#include <unistd.h>
int isatty(int desc);

returns 1 if desc is an open descriptor connected to a terminal and 0 else.

Imigyen is lehet:



 struct stat    stdin_st;
 fstat(fileno(stdin),&stdin_st);
 if ( S_ISFIFO(stdin_st.st_mode) )
  {      ...
  }

A feltetel akkor fut le, ha az stdin egy pipe. Lasd me'g: `man 2 fstat`, hogy a tobbi esetet (regularis file, socket) hogy tudod lekezelni. A terminal ebben az esetben S_ISCHR() lesz, hogy ezen belul ez tenyleg tty-e: lasd `man 3 isatty`, bar asszem ez is valahogy az fstat-bol szedi ki az infot.