0Pricing
C Academy · Pelajaran

Antrean Pesan

Pertukaran pesan terstruktur.

Antrean Pesan adalah pelajaran C Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C Academy mencakup 4 pelajaran total.

Pesan Terstruktur

Antrian pesan memungkinkan proses bertukar pesan yang terpisah, bukan aliran byte mentah. Kernel mempertahankan batas pesan, sehingga setiap pengiriman menjadi tepat satu penerimaan.

Pesan vs Aliran

Pipa mengirimkan aliran byte yang batas-batasnya tidak jelas. Antrian pesan mengirimkan unit utuh:

  • Setiap send adalah satu pesan
  • Setiap receive mengembalikan satu pesan
  • Pesan dapat diberi prioritas

Antrian POSIX vs System V

Ada dua API:

  • POSIX: mq_open, mq_send, mq_receive, diberi nama dengan garis miring
  • System V: msgget, msgsnd, msgrcv, berbasis kunci dengan pesan bertipe

POSIX merupakan pilihan modern yang lebih rapi.

Membuka Antrian

mq_open membuat atau membuka antrian bernama dan mengembalikan deskriptor. Anda dapat meneruskan atribut seperti jumlah maksimum pesan dan ukurannya.

#include <mqueue.h>
#include <fcntl.h>

mqd_t open_queue(const char *name) {
    return mq_open(name, O_CREAT | O_RDWR, 0644, NULL);
    /* name like "/myqueue"; NULL uses default attributes */
}

Atribut Antrian

struct mq_attr menentukan mq_maxmsg (kapasitas) dan mq_msgsize (jumlah byte maksimum per pesan). Buffer penerima harus berukuran setidaknya mq_msgsize.

#include <mqueue.h>

void set_attr(struct mq_attr *a) {
    a->mq_flags = 0;
    a->mq_maxmsg = 10;     /* up to 10 queued messages */
    a->mq_msgsize = 256;   /* each at most 256 bytes */
    a->mq_curmsgs = 0;
}

Mengirim Pesan

mq_send menempatkan pesan ke antrian beserta prioritasnya. Pesan dengan prioritas lebih tinggi dikirimkan lebih dahulu.

#include <mqueue.h>
#include <string.h>

int post(mqd_t q, const char *text) {
    return mq_send(q, text, strlen(text) + 1, 5); /* priority 5 */
}

Menerima Pesan

mq_receive mengembalikan pesan dengan prioritas tertinggi. Buffer harus berukuran setidaknya mq_msgsize, atau pemanggilan gagal dengan EMSGSIZE.

#include <mqueue.h>
#include <stdio.h>

void get(mqd_t q, size_t msgsize) {
    char buf[256];
    unsigned prio;
    ssize_t n = mq_receive(q, buf, msgsize, &prio);
    if (n >= 0) printf("got (prio %u): %s\n", prio, buf);
}

Prioritas Mengatur Urutan Pengiriman

Berbeda dari pipa FIFO, antrian pesan mengirimkan pesan berdasarkan prioritas terlebih dahulu, lalu berdasarkan urutan kedatangan untuk prioritas yang sama. Dengan demikian, pesan mendesak dapat mendahului pesan lain.

Memblokir vs Tidak Memblokir

Secara bawaan, mq_send memblokir saat antrian penuh dan mq_receive memblokir saat antrian kosong. Buka dengan O_NONBLOCK agar keduanya mengembalikan EAGAIN alih-alih menunggu.

Operasi Berbatas Waktu

mq_timedsend dan mq_timedreceive menerima tenggat waktu absolut dan gagal dengan ETIMEDOUT jika operasi tidak dapat selesai tepat waktu. Dengan demikian, proses tidak perlu menunggu selamanya.

Pembersihan

Tutup deskriptor dengan mq_close, lalu hapus antrian bernama dari sistem dengan mq_unlink agar tidak tetap ada setelah semua pengguna selesai.

#include <mqueue.h>

void cleanup(mqd_t q, const char *name) {
    mq_close(q);
    mq_unlink(name); /* remove the named queue */
}

Pemeriksaan Singkat

Uji pemahaman Anda tentang antrian pesan.

Ringkasan

Anda telah mempelajari antrian pesan POSIX.

  • Bertukar pesan terpisah, bukan byte mentah
  • mq_open, mq_send, mq_receive
  • Pengiriman dilakukan berdasarkan prioritas, lalu urutan kedatangan
  • Varian tanpa pemblokiran dan berbatas waktu tersedia secara opsional; lakukan pembersihan dengan mq_close dan mq_unlink

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Antrean Pesan” gratis?

Ya — teks lengkap “Antrean Pesan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C Academy, upgrade ke CoddyKit PRO. Kursus C Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Antrean Pesan”?

Pertukaran pesan terstruktur. Kamu berlatih C Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C Academy?

Tidak diperlukan pengalaman sebelumnya. C Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Antrean Pesan” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C Academy ini?

Ya. Setiap pelajaran C Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pipe
  2. Memori Bersama
  3. Antrean Pesan
  4. Sinyal
← Kembali ke C Academy