Eigenes Programm in stdin schreiben und gleich wieder daraus lesen
-
Hallo,
ich habe mal eine Frage, warum geht das nicht so:
fprintf(stdin, "a\n"); fgets(test, 2, stdin);
Ich möchte in die stdin schreiben, und das dann sofort wieder auslessen.
Irgendwie wird die fprintf anweisung ignoriert.(Bitte jetzt nicht nach den Sinn des Progs fragen^^)
-
Du musst zuerst von der Standardeingabe lesen und dann in die Standardausgabe "schreiben".
fgets(test, 2, stdin); fprintf(stdout,"%s",test);
-
probier's mal mit 'ungetc'. das geht zwar oft nur mit einem zeichen, aber vielleicht hast du ja glück und bei dir sind's mehr.
-
Hello,
ich möchte nicht ausgeben was der Benutzer schreibt....
Ich möchte eigentlich die Funktion kbhit(); für Linux nachprogrammieren.
Eine Funktion die auf eine Tastatureingabe wartet habe ich schon, allerdings wie ich an die Eingabe selbst rannkomme ist mir noch schleierhaft.
-
Ich komm leider nicht weiter, auch nicht ungetc...
jetzt wird nicht mehr aufs Enter gewartet, aber es wird nur das Enter gebuffert..Ich möchte eigentlich die Funktion kbhit(); für Linux in Ansi C nachprogrammieren, aber ganz bekomm ichs nicht hin.
Hier mal was ich habe:
#include <unistd.h> #include <errno.h> #include <sys/types.h> #include <sys/time.h> #include <termios.h> #include <stdio.h> #include <stdlib.h> static int io_tio_set_flag_c_lflag(int fd, int val, int on, int *old) { struct termios tio; if (tcgetattr(fd,&tio)) return -1; if (old) *old=(tio.c_lflag & (val)); if (on) tio.c_lflag |= (val); else tio.c_lflag &= ~(val); if (tcsetattr(fd,1,&tio)) return -1; return 0; } static int io_charavail(int fd) { fd_set set; struct timeval zeit; int ret; int tty=1; int old_ICANON; FD_ZERO(&set); FD_SET(fd,&set); zeit.tv_sec = 0; zeit.tv_usec = 0; if (-1==io_tio_set_flag_c_lflag(fd,ICANON,0,&old_ICANON)) { if (errno==EINVAL || errno==ENOTTY) tty=0; else { fprintf(stderr, "ICANON"); return -1; } } while (1) { ret=select(fd+1,&set,0,0,&zeit); if (ret>=0) break; if (errno==EINTR) continue; fprintf(stderr, "select"); break; } if (tty) io_tio_set_flag_c_lflag(fd,ICANON,old_ICANON,NULL); return ret; } int main(void) { char test[5]; int r; while ((r=io_charavail(0))==0); // Wartet solange, bis was eingegeben wird ungetc(10, stdin); fgets(test, 5, stdin); printf("Der Buchstabe ist: --> %s <--\n",test); return 0; }
-
Kann es sein das ungetc() den Tastaturbuffer loescht?
-
Glaub jetzt hab ich den Fehler,
ungetc() gibt die chars immer vorne hinzu, ich möchte aber ein /n hinten anhängen.gibts eine funktion die einen char hinten in den buffer schreibt?
-
<string.h> ist die bibliothek die du suchst