Sintaks:
int poll (struct pollfd * ufds, int nfds tidak bertanda tangan, int timeout);Argumen "fds" menentukan deskriptor dokumen yang akan diperiksa, serta kejadian penting bagi masing-masing. Ini merujuk kepada salah satu array yang mempunyai satu elemen untuk setiap deskriptor dokumen yang terbuka. Elemen array adalah struktur pollfd, di mana fd menunjukkan deskriptor dokumen terbuka, dan semua kejadian dan kejadian semula, biasanya disebut bitmasks, dihasilkan dengan membuat penggabungan bendera peristiwa yang sesuai:
POLLIN:
Selain daripada data keutamaan, data maklumat dapat dibaca tanpa disekat. Juga, jika mesej tindak balas bersaiz sifar, isyarat bendera ini dihasilkan untuk STREAMS dalam pusingan. Bendera ini mempunyai makna yang sama dengan POLLRDNORM | POLLRDBAND.
POLLRDNORM:
Tanpa gangguan, data maklumat biasa dapat dibaca. Maklumat mengenai band keutamaan utama 0 boleh dibaca walaupun terdapat gangguan untuk STREAMS. Dan jika mesej respons panjangnya sifar, isyarat ini dihasilkan dalam kejadian semula.
POLLRDBAND:
Data keprihatinan utama akan dibaca walaupun menyebabkan kelewatan. Maklumat mengenai julat keutamaan lebih besar dari sifar dapat dibaca walaupun mengganggu STREAMS. Dan jika tindak balas mesej tidak berdurasi, isyarat ini disebarkan dalam revents.
POLLPRI:
Mungkin terdapat beberapa pengecualian untuk deskriptor dokumen. Maklumat dengan keutamaan dapat dibaca tanpa disekat. Juga, jika tindak balas adalah tempoh sifar, isyarat ini disebarkan untuk STREAMS dalam pusingan.
PENCEMARAN:
Pengguna boleh menulis dengan menggunakan bendera POLLOUT. Tidak dapat dihentikan, data khas dapat direkodkan. Maklumat mengenai band keutamaan 0 dapat direkodkan walaupun terdapat gangguan dalam STREAMS.
POLLWRNORM:
Ia berfungsi sama seperti POLLOUT.
POLLWRBAND:
Data yang paling diutamakan akan ditulis menggunakan bendera ini. Maklumat mengenai jarak pilihan lebih besar daripada sifar untuk STREAMS dapat direkodkan tanpa disekat. Aktiviti ini hanya menilai kumpulan yang telah ditulis sekurang-kurangnya sekali kerana tidak ada kumpulan pilihan yang ditulis di STREAM ini.
POLLERR:
Ini adalah keadaan ralat dan hanya berlaku apabila sistem atau aliran mengalami masalah. Simbol ini hanya berlaku untuk bitmask revents; sepanjang peserta aktiviti, ia terlepas pandang.
PENCEMARAN:
Ini menentukan keadaan hang dan hanya berlaku apabila sambungan ke sistem telah dilumpuhkan. Kejadian ini dan POLLOUT sama serasi; setelah masalah timbul, aliran tidak akan pernah ditulis.
POLLNVAL:
Ini menentukan permintaan tidak sah atau tidak biasa. Walau bagaimanapun, aktiviti ini tidak termasuk penyertaan dalam POLLIN, POLLRDNORM, POLLRDBAND, atau POLLPRI. Simbol ini hanya berlaku untuk bitmask revents; ia terlepas pandang pada peserta acara tersebut.
Contoh Panggilan Sistem Pengundian:
Ini melakukan peranan yang sama seperti pilih (), walaupun pada skala yang lebih besar. Poll () boleh didapati di mana-mana mesin Linux berasaskan Glibc. Kernel yang lebih tua meniru tinjauan pendapat () dengan pilih () di seluruh perpustakaan C. Walau bagaimanapun, program tidak perlu membuat perbezaan. Berikut adalah contoh seperti apa tinjauan pendapat (). Oleh itu, buka terminal baris arahan terlebih dahulu menggunakan kekunci pintas “Ctrl + Alt + T."Setelah membukanya, kita harus membuat fail jenis-C untuk menulis kod jenis-C di dalamnya. Untuk ini, kami telah menggunakan penyunting nano. Jadi, cubalah perintah nano di bawah di terminal bersama dengan nama fail C.
$ nano baru.c
Sekarang penyunting nano untuk fail C "baru" telah dibuka. Anda mesti memasukkan beberapa perpustakaan di dalamnya terlebih dahulu, terutamanya "poll.Perpustakaan h. Fungsi utama telah dinyatakan mempunyai jenis pengembalian integer dengan dua argumen dalam parameternya, e.g., argc dan argv. Kemudian kami telah menyatakan fd deskriptor fail dan array jenis watak bernama "buf."Selepas itu, pemboleh ubah jenis struktur telah ditentukan bernama pollfd pfds bersaiz 2. Selanjutnya, panggilan sistem terbuka telah dinyatakan untuk mendapatkan nilai dari array jenis karakter dan menetapkannya ke deskriptor file "fd" seperti yang terlihat dalam gambar. Walaupun deskriptor file adalah "1", struktur "pfds" akan diperbarui dengan beberapa data di dalamnya menggunakan bendera POLLIN di dalamnya. Sekarang kita telah menentukan fungsi panggilan sistem poll (). Parameter pertama panggilan sistem poll () adalah struktur ufds yang digunakan dalam kod. Parameter kedua menentukan jumlah struktur pollfd dalam siri fds.
Dan parameter terakhir menunjukkan nilai habis masa jenis integer untuk panggilan sistem pengundian. Sekiranya pfds diubah dan ditambah dengan nilai 0, maka panggilan sistem baca akan membaca data dari penyangga. Pernyataan "if" akan digunakan untuk memeriksa apakah pernyataan baca telah mengembalikan nilainya ke bilangan bulat dan menulis data. Jika struktur "pfds" berada di posisi "1" saat mencari dan memasukkan data, panggilan sistem baca akan menggunakan data dari penyangga sambil menggunakan deskriptor "fd".
Simpan yang baru.c fail dan tutup. Sekarang kompilasikan dengan menggunakan penyusun gcc.
$ gcc baru.c
Semasa melaksanakan kod ini, kami menambahkan data dalam jajak pendapat untuk dibaca, dan menulis data lagi seperti pada output di bawah.
$ ./ a.keluar
Kesimpulan:
Dalam artikel yang dijelaskan di atas, kami telah membincangkan panggilan sistem poll () dalam bahasa C. Saya harap tutorial ini berguna dan berkesan semasa mengerjakan sistem operasi Linux.