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?
- 832 megtekintés
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.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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);
- A hozzászóláshoz be kell jelentkezni