İleti Kuyrukları
Yapılandırılmış iletiler
İleti Kuyrukları, CoddyKit'te ücretsiz bir C Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C Academy kursu toplamda 4 dersten oluşur.
Yapılandırılmış İleti İletimi
Bir ileti kuyruğu, süreçlerin ham bir bayt akışı yerine ayrı iletiler alışverişi yapmasını sağlar. Çekirdek ileti sınırlarını korur; böylece her gönderme işlemi tam olarak bir alma işlemine karşılık gelir.
İletiler ve Akışlar
Pipe'lar, sınırların belirsizleştiği bir bayt akışı sağlar. İleti kuyrukları ise bütün birimleri iletir:
- Her
sendbir iletidir - Her
receivebir ileti döndürür - İletilere öncelik verilebilir
POSIX ve System V Kuyrukları
İki API vardır:
- POSIX:
mq_open,mq_send,mq_receive; adlandırmada eğik çizgi kullanılır - System V:
msgget,msgsnd,msgrcv; tür bilgisi taşıyan iletilerle anahtar tabanlı çalışır
POSIX daha temiz ve modern bir seçimdir.
Kuyruk Açma
mq_open, adlandırılmış bir kuyruk oluşturur veya açar ve bir tanımlayıcı döndürür. En fazla ileti sayısı ve boyutu gibi öznitelikleri iletebilirsiniz.
#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 */
}Kuyruk Öznitelikleri
struct mq_attr, mq_maxmsg (kapasite) ve mq_msgsize (ileti başına en fazla bayt sayısı) değerlerini tanımlar. Alıcının arabelleği en az mq_msgsize büyüklüğünde olmalıdır.
#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;
}İleti Gönderme
mq_send, bir iletiyi önceliğiyle birlikte kuyruğa yerleştirir. Daha yüksek öncelikli iletiler önce iletilir.
#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 */
}İleti Alma
mq_receive, en yüksek öncelikli iletiyi döndürür. Arabellek en az mq_msgsize büyüklüğünde olmalıdır; aksi takdirde çağrı EMSGSIZE hatasıyla başarısız olur.
#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);
}Öncelikler İletim Sırasını Belirler
FIFO pipe'ın aksine ileti kuyruğu önce önceliğe, aynı öncelik içindeyse geliş sırasına göre iletir. Böylece acil iletiler öne geçebilir.
Engelleyici ve Engelleyici Olmayan İşlemler
Varsayılan olarak mq_send, kuyruk doluyken; mq_receive ise kuyruk boşken engellenir. Beklemek yerine EAGAIN döndürmelerini sağlamak için O_NONBLOCK ile açın.
Zaman Sınırlı İşlemler
mq_timedsend ve mq_timedreceive, mutlak bir son tarih kabul eder. İşlem zamanında tamamlanamazsa ETIMEDOUT hatasıyla başarısız olur. Böylece sonsuza dek beklemek önlenir.
Temizleme
Tanımlayıcıyı mq_close ile kapatın ve adlandırılmış kuyruğu sistemden mq_unlink ile kaldırın; böylece tüm kullanıcılar işini bitirdikten sonra kuyruk kalıcı olmaz.
#include <mqueue.h>
void cleanup(mqd_t q, const char *name) {
mq_close(q);
mq_unlink(name); /* remove the named queue */
}Kısa Kontrol
İleti kuyrukları hakkındaki anlayışınızı sınayın.
Özet
POSIX ileti kuyruklarını öğrendiniz.
- Ham baytlar yerine ayrı iletiler alışverişi yapın
mq_open,mq_send,mq_receive- İletim önce önceliğe, ardından geliş sırasına göre yapılır
- İsteğe bağlı engelleyici olmayan ve zaman sınırlı seçenekler vardır; mq_close ve mq_unlink ile temizleyin
Sıkça Sorulan Sorular
“İleti Kuyrukları” dersi ücretsiz mi?
Evet — “İleti Kuyrukları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C Academy kursu toplamda 4 dersten oluşur.
“İleti Kuyrukları” dersinde ne öğreneceğim?
Yapılandırılmış iletiler C Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“İleti Kuyrukları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Boru Hatları
- Paylaşılan Bellek
- İleti Kuyrukları
- Sinyaller