pipe olvasása (megoldva)

 ( kaltsi | 2008. január 25., péntek - 11:00 )

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ás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

> 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.

Köszi, szerintem ez utóbbi a tökéletes megoldás, de én ezt kreáltam

if (!isatty(fileno(stdin))) fgets(config.msg,sizeof(config.msg),stdin);