2017-11-29 5 views
1

ich die typische Einstellung für Datei io welche mit ausgewählten gut funktioniert wie:wählen, aber ohne Wartezeit (POSIX)

int retval = select(maxfd +1 , &read_set, &write_set, &error_set, 0); // timeout==0 -> endless 

Aber jetzt habe ich eine Situation, wo ich Schleife zu wollen, und prüfen Sie bei jedem Zyklus, wenn man der Dateiselektoren werden bereit. Ich möchte dafür keinen eigenen Thread starten! Gibt es etwas in posix/linux, das hoffentlich mit den gleichen FD_SET-ähnlichen Datenstrukturen verwendet werden kann, die den Dateizustand prüfen, ohne auf sie zu warten?

Ja, ich kann Timeout für select auf einen minimalen Wert festlegen, aber ich hoffe, dass es ohne das getan werden kann.

Antwort

1

POSIX sagt:

eine Umfrage zu bewirken, sollte der Timeout-Parameter nicht ein Nullzeiger sein und auf eine Null-Wert timespec Struktur anweisen.

Also für Ihre Anwendung sollte es ausreichend sein, select so zu nennen:

struct timeval zero = { 0, 0 }; 
int retval = select(maxfd +1 , &read_set, &write_set, &error_set, &zero);