Program yang ingin terus berjalan sambil juga membaca input pengguna interaktif harus multithread atau mereka perlu membaca aliran input dengan hati-hati dan, secara khusus, bersyarat.
Select(2)
dapat digunakan untuk mengimplementasikan pola desain kedua. Itu dapat menentukan apakah input dapat dibaca tanpa memblokir seluruh aplikasi.
select()
panggilan sistem memberi tahu Anda apakah ada data untuk dibaca pada deskriptor file yang Anda minati. Sebenarnya, pertanyaannya adalah apakah operasi baca pada deskriptor file akan diblokir atau tidak.
Jika Anda menjalankan read()
pada deskriptor file — seperti yang terhubung ke port serial — dan tidak ada data untuk dibaca, maka panggilan akan hang hingga ada beberapa data untuk dibaca. Program menggunakan select()
tidak ingin diblokir seperti itu.
Anda juga bertanya:
Mengapa kita harus menaikkan deskriptor file sebesar 1 dan menyebarkannya sementara saya meneruskan deskriptor file yang sudah diatur ke
select
?
Itu mungkin menentukan ukuran FD_SET. Argumen pertama untuk select()
dikenal sebagai nfds
dan POSIX mengatakan:
nfds
argumen menentukan kisaran deskriptor yang akan diuji.nfds
pertama deskriptor harus diperiksa di setiap set; yaitu deskriptor dari nol hingganfds-1
dalam set deskriptor harus diperiksa.
Jadi, untuk menguji deskriptor file n
, nilai dalam nfds
minimal harus n+1
.
Anda menggunakan panggilan pilih ketika Anda harus terus memantau deskriptor file sampai mereka siap untuk beberapa IO tanpa pemblokiran.
Umumnya digunakan ketika Anda menginginkan IO (misalnya read() ) non-blocking , baca :man page
Baca juga API terkait