Pengaturcaraan C

Baris Mesej POSIX dengan Pengaturcaraan C

Baris Mesej POSIX dengan Pengaturcaraan C

Komunikasi Antara Proses POSIX (IPC)

IPC digunakan untuk sambungan masa nyata. Antrian mesej ini adalah sebahagian daripada Linux. Panggilan ini digunakan sebagai standard sekarang tetapi mungkin merupakan sebahagian daripada versi kontemporari. Panggilan ini mudah dilaksanakan dengan antara muka yang lebih bersih.

Antrian Mesej POSIX di Linux

Antrian pesanan V dalam sistem Linux dikenal pasti menggunakan kunci yang diperoleh menggunakan ftok panggilan. Antrian mesej POSIX ini biasanya menggunakan rentetan nama. Dalam sistem Linux, barisan POSIX disebut rentetan. Rentetan ini dianggap bermula dengan / dan kemudian mempunyai watak lain.  Proses yang mengikuti dan mengetahui nama nama giliran dengan hak yang sesuai dapat menghantar atau menerima mesej ke dan dari barisan. Ini akan membantu dalam melaksanakan fungsi penting.

Apakah Panggilan Antrian Mesej POSIX?

Baris mesej POSIX mesti dihubungkan dengan mana-mana perpustakaan yang keluar secara nyata. Berikut adalah beberapa panggilan yang digunakan:

librt menggunakan pilihan penyusun -lrt

Nama panggilan bermula dengan mq_prefix

Perincian Panggilan Antrian dibincangkan di bawah:

>> mq_open, mq_tutup

Fungsi ini digunakan untuk membuka barisan POSIX.

Mq_open adalah fungsi yang digunakan untuk memanggil nama barisan. Parameter seterusnya adalah bendera yang digunakan untuk menerima mesej. O_WRONLY digunakan untuk mengirim mesej, dan O_RDWR digunakan untuk mengirim dan menerima operasi dalam barisan. Pengguna boleh menggunakan bendera O_NONBLOCK untuk menentukan barisan ke mod tidak menyekat dan mq_hantar dan mq_terima untuk menghantar dan menerima data dalam barisan.

Sintaks
Sintaks untuk panggilan giliran di atas ditunjukkan di bawah:

#sertakan
/ * digunakan untuk membuka fail * /
#sertakan
/ * untuk menentukan fail berdasarkan jalan * /
#sertakan
/ * untuk memasukkan deskripsi barisan mesej * /
mqd_t mq_open (nama watak * const, int oflag);
/ * untuk membuka dan mengakses barisan * /
mqd_t mq_open (nama watak * const, int oflag, mode_t mode,
struct mq_attribute * atribut);

Mq_Flag: Boleh jadi O atau tidak sekatan

Mq_MaxMsg: Jumlah maksimum mesej yang dapat dimasukkan ke dalam barisan

Mq_Msgsize: Bilangan maksimum bait dalam mesej

Mq_CurMsg: Sedang menghantar mesej dalam barisan

mq_tutup panggilan: Untuk menutup semua deskriptor barisan.

mq_beritahu

Ini adalah panggilan yang digunakan untuk mendaftar dan membatalkan pendaftaran pemberitahuan ketibaan apabila mesej memasuki barisan kosong.

Sintaks

#sertakan
/ * untuk memasukkan semua perihalan antrian mesej dari kod * /
int mq_notify (mqd_t mqdes, const struct sigevent * sevp);
/ * untuk memberitahu kedatangan mesej dalam barisan * /

pautan_ mq

Ia digunakan untuk menghilangkan queue_name_name.

Sintaks

int mq_unlink (const char * queue_name);
/ * Untuk membuang barisan yang mempunyai nama sebagai queue_name * /

mq_getattr, mq_setattr

Fungsi ini mempunyai struktur atribut:

struct mq_attr digunakan sebagai barisan mesej untuk penerangan.

mq_setattr digunakan untuk menetapkan atribut di dalam barisan.

Sintaks

#sertakan
int mq_getattribute (mqd_t mqdes, struct mq_attribute * atribut);
int mq_setattribute (mqd_t mqdes, const struct mq_attribute * atribut baru,
struct mq_attribute * oldattr);

Contoh: Komunikasi Pelayan Pelanggan melalui POSIX

Berikut ini adalah contoh pelaksanaan komunikasi pelayan pelanggan melalui barisan mesej POSIX. Contohnya, kita akan mempunyai fail pelanggan dan fail pelayan.

Kami akan mempunyai dua fail: fail pertama (pelayan) adalah pelayan.c, dan fail (pelanggan) yang lain adalah pelanggan.c.

Kod Pelayan

Gambar yang dipaparkan di bawah menunjukkan kod yang kami gunakan untuk komunikasi pelayan-pelanggan. Pertama, kami memanggil beberapa perpustakaan untuk menentukan rentetan, pemboleh ubah, dan fungsi. Kemudian, kami menentukan fcntl fungsi dan nama pelayan giliran. Selepas itu, kami menentukan nama barisan pelayan, diikuti dengan ukuran pesan dan ukuran penyangga, untuk menentukan ukuran mesej agar sesuai dengan penyangga kami pada satu masa. Seterusnya, kami memanggil dan menerangkan barisan, kemudian kami membuat token seterusnya untuk melihat tindak balas pelanggan sebaik sahaja dihantar kepada pelanggan. Akhirnya, pengesahan selesai dengan mencetak mesej dari hujung pelayan. Di bahagian seterusnya, anda akan melihat bendera yang dibincangkan di bahagian sebelumnya.

Kami memulakan semua bendera, termasuk mq_flags, mq_maxmsgs, dan lain-lain. untuk meneruskan permintaan menyimpan. Kemudian, kami menerapkan syarat pada nama pelayan dan menyimpan mesej di buffer antrian. Selepas ini, pada masa penyimpanan, kami memastikan bahawa barisan mengikuti peraturan keutamaan yang didahului. Pada akhirnya, kod tersebut memaparkan mesej kegagalan sekiranya ada kesalahan yang diterima dari hujung pelanggan. Akhirnya, kami keluar dari pelayan untuk menghantar permintaan tersebut kepada pelanggan.

Simpan pelayan.fail c

Kod Pelanggan

Kami sekarang akan membincangkan fail kedua. Gambar yang dipaparkan di bawah adalah kod yang kami gunakan untuk komunikasi pelayan pelanggan. Kod itu dimulakan dengan memanggil perpustakaan standard dan menentukan tajuk yang berubah-ubah. Kemudian, kami menentukan rentetan dan semua jenis data. Selepas itu, kami menyatakan tajuk barisan untuk menentukan nama barisan pelayan. Seterusnya, kami menentukan antrean izin dan ukuran pesan di dalam antrian, bersama dengan ukuran penyangga pesan (ukuran maksimum yang dapat masuk di dalam barisan).

Kami akan menerangkan barisan dan membuat pelanggan baru untuk menerima mesej yang dihantar dari akhir pelayan. Kemudian, kami akan memanggil bendera dan memulakannya, dan memanggil fungsi hujung pelanggan. Ia akan keluar dari fungsi sekiranya berlaku kesalahan. Nilai disimpan di dalam penyangga, dan respons permintaan dihantar ke pelayan. Sekiranya terdapat tindak balas, pelayan kemudian akan memberikan token, yang dicetak setelah pelanggan selesai memasukkan input. Sekiranya berlaku kesalahan, ia akan mengembalikan nilai ralat, i.e., pelanggan belum dapat menghantar mesej ke pelayan. Selepas itu, kami akan keluar dari klien.

Selamatkan pelanggan.fail c

Melaksanakan Fail

Kami menggunakan a gcc penyusun untuk melaksanakan fail. Untuk menjalankan fail akhir pelayan, ketik perintah tambahan di tetingkap terminal:

pelayan $ sudo gcc.c -lrt

Seterusnya, taipkan perkara berikut:

$ ./ a.keluar

Hasilnya akan muncul seperti berikut:

Beralih ke tindak balas pelanggan, ketik perkara berikut:

pelanggan $ sudo gcc.c -lrt

Kemudian jalankan perkara berikut:

$ ./ a.keluar

Hasilnya akan muncul seperti berikut:

Kesimpulannya

Dalam artikel ini, anda belajar cara mengirim POSIX Message Queues dengan pengaturcaraan C, serta beberapa fungsinya. Kemudian, anda melihat beberapa contoh proses ini dengan lebih terperinci.

Cara membalikkan arah tatal Tetikus dan Pad Sentuh pada Windows 10
Tetikus dan Pad sentuhs bukan sahaja menjadikan pengkomputeran mudah, tetapi lebih cekap dan kurang memakan masa. Kami tidak dapat membayangkan kehidu...
Cara menukar saiz, warna & skema penunjuk dan kursor tetikus pada Windows 10
Penunjuk dan kursor tetikus di Windows 10 adalah aspek yang sangat penting dalam sistem operasi. Ini boleh dikatakan untuk sistem operasi lain juga, j...
Enjin Permainan Sumber Percuma dan Terbuka untuk Membangunkan Permainan Linux
Artikel ini akan merangkumi senarai enjin permainan sumber percuma dan terbuka yang dapat digunakan untuk mengembangkan permainan 2D dan 3D di Linux. ...