Programmi che vogliono continuare a funzionare mentre anche la lettura dell'input interattivo dell'utente deve essere multithread o devono leggere i flussi di input con attenzione e, in particolare, in modo condizionale.
Select(2)
può essere utilizzato per implementare il secondo modello di progettazione. Può determinare se l'input può essere letto senza bloccare l'intera applicazione.
Il select()
la chiamata di sistema ti dice se ci sono dati da leggere sui descrittori di file che ti interessano. In senso stretto, si tratta di stabilire se un'operazione di lettura sul descrittore di file bloccherà o meno.
Se esegui read()
su un descrittore di file, come quello connesso a una porta seriale, e non ci sono dati da leggere, la chiamata si bloccherà finché non ci saranno dati da leggere. Programmi che usano select()
non desiderare di essere bloccato in questo modo.
Chiedi anche:
Perché dobbiamo incrementare il descrittore di file di 1 e passarlo mentre sto passando il descrittore di file già impostato su
select
?
Probabilmente sta specificando la dimensione di FD_SET. Il primo argomento di select()
è noto come nfds
e POSIX dice:
Il
nfds
argomento specifica l'intervallo di descrittori da testare. Il primonfds
i descrittori devono essere verificati in ciascuna serie; cioè, i descrittori da zero anfds-1
nei set di descrittori devono essere esaminati.
Quindi, per testare un descrittore di file n
, il valore in nfds
deve essere almeno n+1
.
Si utilizza select call quando è necessario monitorare costantemente i descrittori di file fino a quando non sono pronti per alcuni IO senza blocco.
Generalmente utilizzato quando si desidera che l'IO (ad es. read() ) non blocchi, leggere la pagina :man
Leggi anche le relative API