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.