Δημοσιεύτηκε: 22 Οκτ 2008, 20:49
από simosx
Πράγματι είναι ζήτημα με το buffered input που είναι η προεπιλογή.
Με την setvbuf() (από stdio.h) μπορείς να αλλάξεις σε unbuffered.

Κώδικας: Επιλογή όλων
#include <stdio.h>

int main(void)
{
int c;

if ( setvbuf(stdin, NULL, _IONBF, 0) )
{
fprintf(stderr, "Αποτυχία ρύθμισης του τερματικού σε κατάσταση unbuffered\n");
return -1;
}

do
{
c = getchar();
printf(".");
} while ( c != 'q' );

return 0;

}


Το πρόγραμμα όμως δε δουλεύει όπως πρέπει σε Ubuntu, και νομίζω ότι έχει να κάνει με το γεγονός ότι για την setvbuf για να λειτουργήσει, το αρχείο πρέπει να έχει ανοιχτεί άμεσα, δίχως να έχει γίνει κάποια άλλη λειτουργία. Διαφορετικά, το αποτέλεσμα είναι undefined. Είναι πιθανό να συμβαίνει κάτι ειδικό σε Linux.
Μπορείς να βρεις περισσότερα με αναζήτηση για unbuffered setvbuf.

Άλλη επιλογή, αν θέλεις να το ψάξεις ακόμα περισσότερο, είναι να χρησιμοποιήσεις τη βιβλιοθήκη libncurses.