Pemrograman C

Cara Menggunakan Panggilan Sistem Poll di C

Cara Menggunakan Panggilan Sistem Poll di C
Fitur poll() memungkinkan program untuk menggandakan input dan output melalui serangkaian deskriptor file. Dengan kata lain, panggilan sistem poll() dianalogikan dengan panggilan sistem select() dalam bekerja karena mempertahankan apinya untuk salah satu dari beberapa deskriptor file dengan menjadi tersedia untuk I/O. Poll() memeriksa deskriptor dokumen yang ditetapkan untuk membuat daftar peristiwa dalam insiden ke setiap elemen array yang menunjuknya dengan deskriptor file. Metode poll() dapat menentukan deskriptor file mana yang akan dibaca atau ditulis oleh program, yang telah melihat insiden ini. Dalam panduan ini, kita akan menggunakan Ubuntu 20.04 untuk memahami konsep panggilan sistem poll() di Linux langkah demi langkah.

Sintaksis:

int poll(struct pollfd *ufds, unsigned int nfds, int timeout);

Argumen "fds" menentukan deskriptor dokumen yang akan diperiksa, serta insiden signifikansi untuk masing-masing. Ini adalah referensi ke array yang memiliki satu elemen untuk setiap deskriptor dokumen terbuka. Elemen array adalah struktur pollfd, di mana fd menunjukkan deskriptor dokumen terbuka, dan semua kejadian dan re-event, biasanya disebut bitmask, dihasilkan dengan membuat penggabungan dari flag event yang sesuai:

POLISI:

Terlepas dari data prioritas tinggi, data informasi dapat dibaca tanpa bahkan diblokir. Juga, jika pesan respons berukuran nol, sinyal bendera ini dihasilkan untuk STREAMS di revents. Bendera ini memiliki arti yang sama dengan POLLRDNORM | POLLRDBAND.

POLLRDNORM:

Tanpa gangguan, data informasi biasa dapat dibaca. Informasi tentang prioritas utama pita 0 dapat dibaca meskipun ada gangguan untuk STREAMS. Dan jika pesan tanggapan panjangnya nol, sinyal ini dihasilkan dalam peristiwa ulang.

POLLRDBAND:

Data perhatian utama akan dibacakan meskipun menyebabkan penundaan. Informasi tentang rentang prioritas yang lebih besar dari nol dapat dibaca meskipun mengganggu STREAMS. Dan jika respons pesan berdurasi nol, sinyal ini disebarkan secara revents.

POLLPRI:

Mungkin ada beberapa pengecualian untuk deskriptor dokumen. Informasi dengan prioritas utama dapat dibaca tanpa diblokir. Juga, jika responsnya adalah durasi nol, sinyal ini disebarkan untuk STREAMS dalam revents.

POLLOUT:

Pengguna dapat menulis menggunakan bendera POLLOUT. Tanpa berhenti, data tipikal dapat direkam. Informasi tentang pita preferensi 0 dapat direkam meskipun ada gangguan di STREAMS.

POLLWRNORM:

Ini bekerja sama dengan POLLOUT.

POLLWRBAND:

Data yang paling diprioritaskan akan ditulis menggunakan tanda ini. Informasi tentang rentang preferensi lebih besar dari nol untuk STREAMS dapat direkam tanpa diblokir. Kegiatan ini hanya mengevaluasi pita yang telah ditulis minimal satu kali karena tidak ada pita preferensi yang ditulis pada STREAM ini.

POLLER:

Ini adalah kondisi kesalahan dan hanya terjadi ketika sistem atau aliran mengalami masalah. Simbol ini hanya berlaku untuk bitmask revents; selama peserta kegiatan, itu diabaikan.

POLLUP:

Ini menentukan kondisi hang-up dan hanya terjadi ketika koneksi ke sistem telah dinonaktifkan. Kejadian ini dan POLLOUT sama-sama kompatibel; begitu masalah muncul, aliran tidak akan pernah ditulis.

POLLNVAL:

Ini menentukan permintaan yang tidak valid atau tidak biasa. Namun, kegiatan ini tidak mengecualikan partisipasi dalam POLLIN, POLLRDNORM, POLLRDBAND, atau POLLPRI. Simbol ini hanya berlaku untuk bitmask revents; itu diabaikan dalam peserta acara.

Contoh Panggilan Sistem Jajak Pendapat:

Ini melakukan peran yang sama dengan pilih (), meskipun dalam skala yang lebih besar. Poll() tersedia di semua mesin Linux berbasis Glibc. Kernel yang lebih lama meniru poll() dengan select() di seluruh pustaka C. Namun, program tidak perlu membuat perbedaan. Berikut ini contoh bagaimana rasanya poll(). Jadi buka terminal baris perintah terlebih dahulu menggunakan tombol pintas “Ctrl+Alt+T.” Setelah membukanya, kita harus membuat file tipe-C untuk menulis kode tipe-C di dalamnya. Untuk ini, kami telah menggunakan editor nano. Jadi, coba perintah nano di bawah ini di terminal bersama dengan nama file C.

$nano baru.c

Sekarang editor nano untuk file C "baru" telah dibuka. Anda harus terlebih dahulu memasukkan beberapa perpustakaan di dalamnya, terutama "jajak pendapat".h” perpustakaan. Fungsi utama telah ditentukan memiliki tipe pengembalian integer dengan dua argumen dalam parameternya, e.g., argc dan argv. Kemudian kita telah mendeklarasikan file descriptor fd dan array tipe karakter bernama “buf.” Setelah itu, variabel tipe struktur telah didefinisikan bernama pollfd pfds dengan ukuran 2. Selanjutnya, panggilan sistem terbuka telah dideklarasikan untuk mendapatkan nilai dari array tipe karakter dan menetapkannya ke deskriptor file “fd” seperti yang terlihat pada gambar. Sementara deskriptor file adalah "1", struktur "pfds" akan diperbarui dengan beberapa data di dalamnya menggunakan flag POLLIN di dalamnya. Sekarang kita telah mendefinisikan fungsi panggilan sistem poll(). Parameter pertama dari panggilan sistem poll() adalah struktur ufds yang digunakan dalam kode. Parameter kedua menentukan total struktur pollfd dalam seri fds.

Dan parameter terakhir menunjukkan nilai batas waktu tipe integer untuk panggilan sistem jajak pendapat. Jika pfds revents dan ditambah dengan nilai 0, maka read system call akan membacakan data dari buffer. Pernyataan "jika" akan digunakan untuk memeriksa apakah pernyataan baca telah mengembalikan nilainya ke bilangan bulat dan menulis data. Jika struct “pfds” berada pada posisi “1” saat revent dan menginput data, system call read akan menggunakan data dari buffer saat menggunakan deskriptor “fd”.

Simpan yang baru.c file dan tutup. Sekarang kompilasi menggunakan kompiler gcc.

$gcc baru.c

Saat menjalankan kode ini, kami menambahkan data dalam polling untuk dibaca, dan menulis data lagi seperti pada output di bawah ini.

$ ./Sebuah.di luar

Kesimpulan:

Dalam artikel yang dijelaskan di atas, kita telah membahas panggilan sistem poll() dalam bahasa C. Saya harap Anda menemukan tutorial ini bermanfaat dan efisien saat bekerja di sistem operasi Linux.

Vulkan untuk Pengguna Linux
Dengan setiap generasi baru kartu grafis, kami melihat pengembang game mendorong batas kesetiaan grafis dan selangkah lebih dekat ke fotorealisme. Tet...
OpenTTD vs Simutrans
Membuat simulasi transportasi Anda sendiri bisa menyenangkan, santai, dan sangat menarik. Itulah mengapa Anda perlu memastikan bahwa Anda mencoba game...
Tutorial OpenTTD
OpenTTD adalah salah satu game simulasi bisnis paling populer di luar sana. Dalam game ini, Anda perlu membuat bisnis transportasi yang luar biasa. Na...