C Programlama

C Programlama ile POSIX Mesaj Kuyrukları

C Programlama ile POSIX Mesaj Kuyrukları

POSIX Süreçler Arası İletişim (IPC)

IPC, gerçek zamanlı uzantılar için kullanılır. Bu mesaj kuyrukları Linux'un bir parçasıdır. Bu çağrılar artık standart olarak kullanılmaktadır ancak çağdaş sürümlerin bir parçası olabilir. Bu çağrıların çok daha temiz bir arayüzle uygulanması kolaydır.

Linux'ta POSIX Mesaj Kuyrukları

Bir Linux sistemindeki V mesaj kuyrukları, kullanılarak elde edilen anahtarlar kullanılarak tanımlanır ftok aramalar. Bu POSIX ileti kuyrukları genellikle ad dizelerini kullanır. Linux sistemlerinde, POSIX kuyruklarına dizgiler denir. Bu dizelerin / ile başladığı ve ardından başka karakterlere sahip olduğu kabul edilir.  Kuyruk adını takip eden ve uygun haklara sahip kuyruk adını bilen işlemler, kuyruğa ve kuyruktan mesaj gönderebilir veya alabilir. Bu, önemli işlevlerin gerçekleştirilmesine yardımcı olacaktır.

POSIX Mesaj Kuyruğu Çağrıları Nedir??

POSIX mesaj kuyrukları, gerçek olarak çıkan herhangi bir kitaplıkla bağlantı kurmalıdır. Aşağıda kullanılan birkaç çağrı verilmiştir:

librt -lrt derleyici seçeneğini kullanır

Çağrı adları mq_prefix ile başlar

Kuyruk Çağrılarının ayrıntıları aşağıda tartışılmaktadır:

>> mq_open, mq_close

Bu fonksiyon, bir POSIX kuyruğu açmak için kullanılır.

Mq_open, kuyruğun adını çağırmak için kullanılan bir işlevdir. Sonraki parametre, mesajları almak için kullanılan bir bayraktır. O_WRONLY, mesaj göndermek için kullanılır ve O_RDWR, kuyruk içindeki işlemleri göndermek ve almak için kullanılır. Kullanıcılar, engellenmeyen moda kuyruğu belirtmek için O_NONBLOCK bayrağını kullanabilir ve mq_send ve mq_receive kuyrukta veri göndermek ve almak için.

Sözdizimi
Yukarıdaki kuyruk çağrısının sözdizimi aşağıda gösterilmiştir:

#Dahil etmek
/* dosyaları açmak için kullanılır */
#Dahil etmek
/* yola dayalı bir dosya belirlemek için */
#Dahil etmek
/* mesaj kuyruğu açıklamalarını dahil etmek için */
mqd_t mq_open (sabit karakter *isim, int oflag);
/* kuyruğu açmak ve sıraya erişmek için */
mqd_t mq_open (sabit karakter *ad, int gecikme, mode_t modu,
struct mq_attribute *özellik);

Mq_Flags: O veya bloksuz olabilir

Mq_MaxMsg: Kuyruğa girilebilecek maksimum mesaj sayısı

Mq_Msgsize: Bir mesajdaki maksimum bayt sayısı

Mq_CurMsgs: Şu anda bir kuyruk içinde gönderilen iletiler

mq_close çağrıları: Tüm kuyruk tanımlayıcılarını kapatmak için.

mq_notify

Bir mesaj boş bir kuyruğa girdiğinde varış bildirimini kaydetmek ve kaydını silmek için kullanılan bir çağrıdır.

Sözdizimi

#Dahil etmek
/* koddaki tüm mesaj kuyruğu açıklamalarını dahil etmek için */
int mq_notify (mqd_t mqdes, const struct sigevent *sevp);
/* mesajın kuyruğa geldiğini bildirmek için */

mq_unlink

Kuyruk_adı olan kuyruğu kaldırmak için kullanılır.

Sözdizimi

int mq_unlink(const char *sıra_adı);
/* Kuyruk_adı adındaki kuyruğu kaldırmak için */

mq_getattr, mq_setattr

Bu işlevin bir nitelik yapısı vardır:

struct mq_attr, tanımlayıcılar için bir mesaj kuyruğu olarak kullanılır.

mq_setattr, bir kuyruk içindeki öznitelikleri ayarlamak için kullanılır.

Sözdizimi

#Dahil etmek
int mq_getattribute(mqd_t mqdes, struct mq_attribute *öznitelik);
int mq_setattribute(mqd_t mqdes, const struct mq_attribute *yeni nitelik,
struct mq_attribute*oldattr);

Örnek: POSIX aracılığıyla İstemci-Sunucu İletişimi

Aşağıdaki, POSIX mesaj kuyrukları aracılığıyla istemci-sunucu iletişimini gerçekleştirmenin bir örneğidir. Örnekte bir istemci dosyamız ve sunucu dosyamız olacak.

İki dosyamız olacak: ilk (sunucu) dosya sunucu.c, ve diğer (istemci) dosya müşteri.c.

Sunucu Kodu

Aşağıdaki resim, istemci-sunucu iletişimi için kullandığımız kodu göstermektedir. İlk olarak, dizileri, değişkenleri ve fonksiyonları tanımlamak için bazı kütüphaneleri çağırdık. Daha sonra tanımladık fcntl kuyruk sunucusunun işlevi ve adı. Bundan sonra, bir seferde arabelleğimize sığacak mesajların boyutunu tanımlamak için sunucu kuyruğunun adını, ardından mesaj boyutunu ve arabellek boyutunu tanımladık. Daha sonra, kuyrukları aradık ve tanımladık, ardından müşteriye gönderildikten sonra müşteri yanıtını görmek için bir sonraki belirteçleri oluşturduk. Son olarak, sunucu ucundan gelen mesaj yazdırılarak onay tamamlandı. Bir sonraki bölümde, önceki bölümde tartışılan bayrakları göreceksiniz.

Dahil olmak üzere tüm bayrakları başlattık mq_flags, mq_maxmsgs, vb. istekleri depolamaya devam etmek için. Ardından koşulu sunucu adına uyguladık ve mesajları sıra arabelleğinde sakladık. Bundan sonra, depolama zamanında, kuyrukların ilk gelene dayalı bir öncelik kuralı izlemesini sağladık. Sonunda, istemci tarafından alınan herhangi bir hata varsa kod bir hata mesajı görüntüler. Son olarak, isteği istemciye göndermek için sunucudan çıktık.

sunucuyu kaydet.c dosyası

Müşteri kodu

Şimdi ikinci dosyayı tartışacağız. Aşağıdaki görüntü, istemci-sunucu iletişimi için kullandığımız koddur. Kod, standart kitaplıkları çağırarak ve değişken başlıkları tanımlayarak başladı. Daha sonra dizileri ve tüm veri türlerini tanımladık. Bundan sonra, sunucu kuyruk adını tanımlamak için kuyruğun başlığını ilan ettik. Daha sonra, mesaj arabelleğinin boyutu (kuyruğa sığabilecek maksimum boyut) ile birlikte kuyruk içindeki izin kuyruklarını ve mesaj boyutunu tanımladık.

Kuyrukları tanımlayacağız ve sunucunun sonundan gönderilen mesajları almak için yeni bir istemci oluşturacağız. Ardından, bayrakları çağıracağız ve onları başlatacağız ve istemci-son işlevini çağıracağız. Hata durumunda fonksiyondan çıkacaktır. Değer arabellek içinde saklanır ve sunucuya bir istek yanıtı gönderilir. Bir yanıt durumunda, sunucu, istemci girişi girdikten sonra yazdırılan belirteci sağlayacaktır. Bir hata durumunda, hata değerlerini döndürür, i.e., istemci sunucuya mesaj gönderemedi. Ondan sonra istemciden çıkacağız.

İstemciyi kaydet.c dosyası

Dosyaları Yürütme

biz kullanıyoruz gcc dosyaları yürütmek için derleyici. Sunucu bitiş dosyasını çalıştırmak için terminal penceresine eklenen komutu yazın:

$ sudo gcc sunucusu.c -lrt

Ardından, aşağıdakini yazın:

$ ./a.dışarı

Çıktı aşağıdaki gibi görünecektir:

İstemci yanıtına geçerek aşağıdakileri yazın:

$ sudo gcc istemcisi.c -lrt

Ardından aşağıdakileri çalıştırın:

$ ./a.dışarı

Çıktı aşağıdaki gibi görünecektir:

Sonuç

Bu makalede, C programlama ile POSIX Mesaj Kuyruklarının nasıl gönderileceğini ve bazı işlevlerini öğrendiniz. Ardından, bu sürecin bazı örneklerini daha ayrıntılı olarak gördünüz.

AppyMouse On-screen Trackpad and Mouse Pointer for Windows Tablets
Tablet users often miss the mouse pointer, especially when they are habitual to using the laptops. The touchscreen Smartphones and tablets come with m...
Middle mouse button not working in Windows 10
The middle mouse button helps you scroll through long webpages and screens with a lot of data. If that stops, well you will end up using the keyboard ...
How to change Left & Right mouse buttons on Windows 10 PC
It's quite a norm that all computer mouse devices are ergonomically designed for right-handed users. But there are mouse devices available which are s...