msgget(), msgsnd(), msgrcv(), এবং msgctl() ফাংশন গাইড ও নোট

Computer Science - ইন্টার প্রসেস কমিউনিকেশন (Inter Process Communication) - Message Passing
408

msgget(), msgsnd(), msgrcv(), এবং msgctl() ফাংশনগুলি UNIX/Linux সিস্টেমে মেসেজ কিউ (Message Queue) পরিচালনার জন্য ব্যবহৃত সিস্টেম কল। মেসেজ কিউ হল একটি আইপি (Inter-Process Communication) পদ্ধতি, যা প্রক্রিয়াগুলির মধ্যে তথ্য আদান-প্রদানের জন্য ব্যবহার করা হয়। আসুন এই ফাংশনগুলির ব্যবহার এবং কার্যকারিতা নিয়ে আলোচনা করি।

1. msgget()

সংজ্ঞা:

msgget() ফাংশনটি একটি নতুন মেসেজ কিউ তৈরি করে বা একটি বিদ্যমান কিউর জন্য শনাক্তকারী (identifier) প্রদান করে।

সাইনাটর:

int msgget(key_t key, int msgflg);
  • key: মেসেজ কিউয়ের জন্য একটি ইউনিক কী।
  • msgflg: কিছু ফ্ল্যাগ, যেমন IPC_CREAT (যদি কিউটি না থাকে তবে তৈরি করবে)।

উদাহরণ:

#include <sys/ipc.h>
#include <sys/msg.h>

key_t key = 1234; // মেসেজ কিউয়ের জন্য একটি কী
int msgid = msgget(key, IPC_CREAT | 0666); // নতুন মেসেজ কিউ তৈরি করা

2. msgsnd()

সংজ্ঞা:

msgsnd() ফাংশনটি একটি মেসেজ কিউতে নতুন মেসেজ পাঠানোর জন্য ব্যবহৃত হয়।

সাইনাটর:

int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
  • msqid: msgget() দ্বারা প্রাপ্ত মেসেজ কিউয়ের শনাক্তকারী।
  • msgp: পাঠানোর জন্য মেসেজের পয়েন্টার।
  • msgsz: মেসেজের আকার (বাইটে)।
  • msgflg: ফ্ল্যাগ, যেমন IPC_NOWAIT (যদি কিউ পূর্ণ হয় তবে অপেক্ষা না করা)।

উদাহরণ:

#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
#include <string.h>

struct msgbuf {
    long mtype; // মেসেজের টাইপ
    char mtext[100]; // মেসেজের বিষয়বস্তু
};

struct msgbuf message;
message.mtype = 1; // মেসেজের টাইপ সেট করা
strcpy(message.mtext, "Hello, World!");

msgsnd(msgid, &message, sizeof(message.mtext), 0); // মেসেজ কিউতে মেসেজ পাঠানো

3. msgrcv()

সংজ্ঞা:

msgrcv() ফাংশনটি একটি মেসেজ কিউ থেকে মেসেজ গ্রহণ করার জন্য ব্যবহৃত হয়।

সাইনাটর:

int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
  • msqid: msgget() দ্বারা প্রাপ্ত মেসেজ কিউয়ের শনাক্তকারী।
  • msgp: গ্রহণের জন্য মেসেজের পয়েন্টার।
  • msgsz: মেসেজের সর্বাধিক আকার (বাইটে)।
  • msgtyp: মেসেজের টাইপ (যদি 0 হয় তবে যেকোন মেসেজ গ্রহণ করবে)।
  • msgflg: ফ্ল্যাগ, যেমন IPC_NOWAIT (যদি কিউতে মেসেজ না থাকে তবে অপেক্ষা না করা)।

উদাহরণ:

#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>

struct msgbuf {
    long mtype; // মেসেজের টাইপ
    char mtext[100]; // মেসেজের বিষয়বস্তু
};

struct msgbuf message;
msgrcv(msgid, &message, sizeof(message.mtext), 1, 0); // মেসেজ গ্রহণ করা

printf("Received: %s\n", message.mtext); // মেসেজ প্রদর্শন

4. msgctl()

সংজ্ঞা:

msgctl() ফাংশনটি মেসেজ কিউয়ের জন্য বিভিন্ন নিয়ন্ত্রণ অপারেশন সম্পাদন করে।

সাইনাটর:

int msgctl(int msqid, int cmd, struct msqid_ds *buf);
  • msqid: msgget() দ্বারা প্রাপ্ত মেসেজ কিউয়ের শনাক্তকারী।
  • cmd: অপারেশন নির্দেশ করে, যেমন IPC_RMID (মেসেজ কিউ মুছে ফেলা)।
  • buf: মেসেজ কিউ সম্পর্কে তথ্য সংগ্রহ করতে ব্যবহৃত হয় (সাধারণত NULL হতে পারে)।

উদাহরণ:

msgctl(msgid, IPC_RMID, NULL); // মেসেজ কিউ মুছে ফেলা

সম্পূর্ণ উদাহরণ

নিচে একটি সম্পূর্ণ উদাহরণ দেওয়া হল যা মেসেজ কিউ তৈরি, মেসেজ পাঠানো, মেসেজ গ্রহণ এবং মেসেজ কিউ মুছে ফেলার প্রক্রিয়া দেখায়:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <unistd.h>

struct msgbuf {
    long mtype; // মেসেজের টাইপ
    char mtext[100]; // মেসেজের বিষয়বস্তু
};

int main() {
    key_t key = 1234; // মেসেজ কিউয়ের জন্য কী
    int msgid = msgget(key, IPC_CREAT | 0666); // মেসেজ কিউ তৈরি

    // মেসেজ পাঠানো
    struct msgbuf message;
    message.mtype = 1; // মেসেজের টাইপ
    strcpy(message.mtext, "Hello, World!");
    msgsnd(msgid, &message, sizeof(message.mtext), 0); // মেসেজ পাঠানো

    // মেসেজ গ্রহণ
    struct msgbuf received_message;
    msgrcv(msgid, &received_message, sizeof(received_message.mtext), 1, 0); // মেসেজ গ্রহণ
    printf("Received: %s\n", received_message.mtext); // মেসেজ প্রদর্শন

    // মেসেজ কিউ মুছে ফেলা
    msgctl(msgid, IPC_RMID, NULL); // মেসেজ কিউ মুছে ফেলা

    return 0;
}

উপসংহার

msgget(), msgsnd(), msgrcv(), এবং msgctl() ফাংশনগুলি UNIX/Linux সিস্টেমে মেসেজ কিউ পরিচালনার জন্য গুরুত্বপূর্ণ। এগুলি বিভিন্ন প্রক্রিয়ার মধ্যে তথ্য আদান-প্রদান নিশ্চিত করে, যা সিস্টেমের কার্যকারিতা এবং সহযোগিতা বাড়ায়। সঠিকভাবে এই ফাংশনগুলি ব্যবহার করে সফটওয়্যার সিস্টেমের যোগাযোগ দক্ষতা উন্নত করা সম্ভব।

Promotion

Are you sure to start over?

Loading...