GNU/Linux >> Belajar Linux >  >> Linux

Mengapa pilih digunakan di Linux

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 hingga nfds-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


Linux
  1. Izin File di Linux – Baca/Tulis/Jalankan

  2. 10 Contoh Perintah Potong Linux Praktis untuk Memilih Kolom File

  3. Memotong file saat sedang digunakan (Linux)

  1. Linux – Semuanya Adalah File?

  2. Mengapa kita membutuhkan file .so.1 di Linux?

  3. Mengapa rsync gagal menyalin file dari /sys di Linux?

  1. Mengapa saya menggunakan exa daripada ls di Linux

  2. Cara memindahkan file di Linux

  3. Mengapa kami memiliki 3 jenis pilihan-X di LINUX?