Pengaturcaraan C

Cara Menggunakan Pilih Sistem Panggilan Di C

Cara Menggunakan Pilih Sistem Panggilan Di C
Panggilan sistem select () membolehkan sistem menjejaki beberapa deskriptor fail. Jadi, panggilan sistem pilih menunggu salah satu penerangan atau keseluruhan berubah menjadi "siap" untuk jenis aktiviti I / O tertentu (e.g., input mungkin). Sekiranya proses I / O berikutnya (e.g., read (2)) dapat dilakukan walaupun menyekat, deskriptor fail dianggap mampu. Kaedah select () menerangkan sama ada deskriptor dokumen tersedia untuk dibaca, disediakan untuk ditulis, atau dalam keadaan pengecualian. Andaikan keadaan yang dinyatakan adalah salah untuk keseluruhan deskriptor fail yang dinyatakan. Dalam kes tersebut, blok panggilan sistem select () sebelum keadaan yang disebutkan berlaku untuk sekurang-kurangnya salah satu deskriptor dokumen yang dinyatakan, sama dengan selang waktu tamat yang dinyatakan.

Contoh untuk Pilih Sistem Panggilan:

Mari kita ada contoh mudah untuk melihat cara kerja sistem panggilan terpilih. Buka shell baris perintah menggunakan "Ctrl + Alt + T."Selepas terminal dibuka, pastikan anda mempunyai penyusun bahasa C yang terpasang di sistem anda kerana kodnya tidak akan berfungsi tanpanya. Sekiranya anda tidak memilikinya, cubalah arahan di bawah untuk melakukannya.

$ sudo apt pasangkan gcc

Sekiranya anda ingin melihat panggilan sistem pilih Linux berfungsi, anda mesti memasang pakej manpages-dev pada sistem anda mengikut arahan di bawah. Tulis kata laluan pengguna anda untuk meneruskan.

$ sudo apt install manpages-dev

Anda dapat melihat sintaks dan pengoperasian panggilan sistem pilihan menggunakan perintah "man" di bawah.

$ lelaki 2 pilih

Halaman man output untuk panggilan sistem pilih ditunjukkan di bawah. Tutup dengan menekan kekunci "q".

Direktori standard, terminal terminal arahan & aplikasi terminal semu, dokumen berpusat STREAMS, FIFO, termasuk paip, semuanya disokong oleh modul select (). Kegiatan select () pada deskriptor dokumen yang merujuk kepada format fail lain tidak diketahui. Jadi di bawah ini adalah penjelasan mengenai panggilan sistem Pilih.

Penerangan mengenai sintaks yang ditunjukkan dalam gambar di atas dijelaskan di bawah.

Di atas adalah perpustakaan yang akan dimasukkan dalam kod C semasa menggunakan panggilan sistem pilih. Sekiranya tidak disertakan, kod tersebut tidak berfungsi.

The nfds pernyataan menentukan set deskriptor fail yang akan dinilai. Kaedah select () memeriksa deskriptor fail antara 0 dan nfds-1.

Semasa readfds tidak kosong, ini merujuk kepada susunan bentuk fd_set yang menentukan deskriptor dokumen mana yang harus diuji untuk kesediaan membaca pada input dan deskriptor dokumen mana yang harus siap dibaca pada output.

Apabila surat tulis parameter tidak kosong, ia merujuk kepada entiti bentuk fd_set yang menentukan deskriptor dokumen mana yang harus diuji untuk kesediaan untuk menulis pada input. Penerangan dokumen harus bersedia untuk menyusun output.

Sementara kesilapan parameter tidak kosong, ini merujuk kepada objek jenis fd_set, yang menentukan deskriptor dokumen mana yang harus diuji untuk menunggu keadaan ralat semasa input; juga, deskriptor dokumen harus disahkan pada output.

Parameter readfds, writefds, dan errorfds dikemas kini setelah selesai untuk menandakan bahawa deskriptor dokumen bersedia untuk membaca, siap sepenuhnya untuk menulis, atau bahkan mempunyai keadaan pengecualian yang menanti, sesuai. Sekiranya bit berikutnya tetap pada input dan keadaan yang relevan berlaku untuk setiap deskriptor fail sedikit di bawah nfds, bit berikutnya akan diletakkan pada pencapaian yang berkesan.

Walaupun parameter timeout tidak benar-benar kosong, ia menuju ke entiti timeval struktur yang menentukan waktu tertinggi untuk menahan api agar pilihan selesai. Pilih () tidak menghalang jika parameter timeout seperti itu membawa objek struktur timeval dengan 0 elemen. Pilih () berhenti kecuali kejadian berlaku membolehkan salah satu penapis diambil dengan hasil yang benar (bukan sifar), sama ada penyataan tamat adalah rujukan kosong. Pilih () berjaya dengan berkesan dan menghasilkan 0 apabila tempoh menunggu berakhir sebelum kejadian berlaku, yang mungkin memerlukan salah satu daripada beberapa topeng disesuaikan dengan nilai bukan sifar.

Makro ini menghilangkan koleksi (menghapus semua deskriptor dokumen). Ia dapat digunakan sebagai langkah pertama dalam inisialisasi koleksi deskriptor dokumen.

Penerangan dokumen fd ditambahkan ke koleksi oleh makro ini. Menggunakan deskriptor dokumen untuk koleksi yang sudah ada tidak dapat beroperasi dan oleh itu tidak menyebabkan kesalahan pengecualian.

Penerangan dokumen fd dikeluarkan dari koleksi oleh makro ini. Deskriptor fail yang dihapuskan dari koleksi yang tidak ada tidak beroperasi dan oleh itu tidak menghasilkan pengecualian.

Panggilan sistem select () mengubah maklumat atau data koleksi sesuai dengan peraturan yang disebutkan di atas. Makro FD ISSET () boleh dikeluarkan dengan memanggil select () untuk melihat sama ada deskriptor dokumen tetap tersedia dalam koleksi.

Mari buat fail jenis C baru bernama "baru.c ”seperti di bawah.

$ nano baru.c

Editor GNU telah dibuka. Tuliskan kod di bawahnya. Kod tersebut mengandungi tajuk, fungsi utama dengan beberapa deskriptor fail seperti yang dihuraikan di atas. Ini juga mengandungi struktur untuk nilai selang waktu. Kemudian kami telah menggunakan panggilan sistem pilih untuk memeriksa kesalahan dalam pernyataan "if". Tekan "Ctrl + S" untuk menyimpan kod ini dan "Ctrl + X" dari berhenti dari editor.

Sekarang kumpulkan kod menggunakan arahan "gcc".

$ gcc baru.c

Jalankan kod dan jangan tambah input. Keluaran akan berbunyi "pilih timeout."

$ ./ a.keluar

Sekali lagi, jalankan kod dan berikan sedikit input di terminal, e.g., “Aqsa."Ini akan menghasilkan bahawa" data tersedia."

Kesimpulan:

Kami telah melaksanakan panggilan sistem pilih di Ubuntu 20.04 sistem Linux. Kod tersebut harus berfungsi pada semua pengedaran Linux secara sama rata dan betul. Semoga artikel ini mudah dilaksanakan dan difahami.

Buat semula butang tetikus anda secara berbeza untuk perisian yang berbeza dengan X-Mouse Button Control
Mungkin anda memerlukan alat yang dapat mengubah kawalan tetikus anda dengan setiap aplikasi yang anda gunakan. Sekiranya ini berlaku, anda boleh menc...
Kajian Tetikus Tanpa Wayar Microsoft Sculpt Touch
Saya baru-baru ini membaca mengenai Sentuhan Microsoft Sculpt tetikus tanpa wayar dan memutuskan untuk membelinya. Setelah menggunakannya sebentar, sa...
Trackpad dan Mouse Pointer pada skrin Windows AppyMouse untuk Tablet Windows
Pengguna tablet sering kehilangan penunjuk tetikus, terutama ketika mereka biasa menggunakan komputer riba. Telefon pintar dan tablet skrin sentuh dil...