pipe() এবং mkfifo() এর ব্যবহার

Pipes এবং Named Pipes (FIFO) - ইন্টার প্রসেস কমিউনিকেশন (Inter Process Communication) - Computer Science

442

pipe() এবং mkfifo() হল UNIX/Linux সিস্টেমে ইন্টার-প্রসেস কমিউনিকেশন (IPC) এর জন্য ব্যবহৃত ফাংশন। এগুলি প্রক্রিয়াগুলির মধ্যে তথ্য বিনিময়ের জন্য বিভিন্ন পদ্ধতি সরবরাহ করে। আসুন আমরা প্রতিটি ফাংশনের ব্যবহার এবং কার্যকারিতা নিয়ে বিস্তারিত আলোচনা করি।

1. pipe()

সংজ্ঞা:

pipe() ফাংশনটি একটি পাইপ তৈরি করে, যা একটি প্রক্রিয়া থেকে অন্য প্রক্রিয়ায় ডেটা প্রবাহিত করতে ব্যবহৃত হয়। এটি একটি ডেটা স্ট্রিম তৈরি করে, যা এক প্রক্রিয়ার আউটপুটকে অন্য প্রক্রিয়ার ইনপুট হিসাবে ব্যবহার করতে দেয়।

সাইনাটর:

int pipe(int fd[2]);
  • fd: একটি অ্যারে, যেখানে fd[0] হলো পাইপের পড়ার (read) এবং fd[1] হলো লেখার (write) জন্য ফাইল ডিসক্রিপ্টর।

উদাহরণ:

#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main() {
    int fd[2]; // পাইপের জন্য ফাইল ডিসক্রিপ্টর
    char write_msg[] = "Hello from the writer!";
    char read_msg[100];

    // পাইপ তৈরি করা
    pipe(fd);

    // একটি নতুন প্রক্রিয়া তৈরি করা
    if (fork() == 0) {
        // শিশু প্রক্রিয়া (লেখক)
        write(fd[1], write_msg, strlen(write_msg) + 1); // পাইপে লেখার
    } else {
        // পিতৃ প্রক্রিয়া (পড়ার জন্য)
        read(fd[0], read_msg, sizeof(read_msg)); // পাইপ থেকে পড়া
        printf("Received: %s\n", read_msg); // পড়া ডেটা প্রদর্শন
    }

    return 0;
}

2. mkfifo()

সংজ্ঞা:

mkfifo() ফাংশনটি একটি ফিফো (FIFO) বিশেষ ফাইল তৈরি করে, যা একটি নামকরণকৃত পাইপ হিসেবে কাজ করে। এটি একটি অস্থায়ী ফাইল তৈরি করে যা একাধিক প্রক্রিয়ার মধ্যে যোগাযোগের জন্য ব্যবহৃত হয়।

সাইনাটর:

int mkfifo(const char *pathname, mode_t mode);
  • pathname: FIFO ফাইলের নাম এবং অবস্থান।
  • mode: ফাইলের অনুমতি (permissions) নির্দেশ করে।

উদাহরণ:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main() {
    const char *fifo_path = "/tmp/myfifo";
    char write_msg[] = "Hello from the FIFO!";
    char read_msg[100];

    // FIFO তৈরি করা
    mkfifo(fifo_path, 0666);

    // একটি নতুন প্রক্রিয়া তৈরি করা
    if (fork() == 0) {
        // শিশু প্রক্রিয়া (লেখক)
        int fd = open(fifo_path, O_WRONLY); // FIFO খোলা
        write(fd, write_msg, sizeof(write_msg)); // FIFO তে লেখার
        close(fd); // FIFO বন্ধ করা
    } else {
        // পিতৃ প্রক্রিয়া (পড়ার জন্য)
        int fd = open(fifo_path, O_RDONLY); // FIFO খোলা
        read(fd, read_msg, sizeof(read_msg)); // FIFO থেকে পড়া
        printf("Received: %s\n", read_msg); // পড়া ডেটা প্রদর্শন
        close(fd); // FIFO বন্ধ করা

        // FIFO মুছে ফেলা
        unlink(fifo_path);
    }

    return 0;
}

উপসংহার

pipe() এবং mkfifo() ফাংশনগুলি UNIX/Linux সিস্টেমে ইন্টার-প্রসেস কমিউনিকেশন এর জন্য অত্যন্ত গুরুত্বপূর্ণ। pipe() একটি অস্থায়ী, অদৃশ্য পাইপ তৈরি করে যা একাধিক প্রসেসের মধ্যে তথ্য প্রেরণের জন্য ব্যবহৃত হয়, যখন mkfifo() একটি নামকরণকৃত FIFO ফাইল তৈরি করে যা নাম দ্বারা শনাক্ত করা যায় এবং একাধিক প্রসেসের মধ্যে তথ্য ভাগ করে নেওয়ার অনুমতি দেয়। উভয় প্রযুক্তি মিলে প্রক্রিয়াগুলির মধ্যে যোগাযোগ দক্ষতা বাড়ায়।

Promotion

Are you sure to start over?

Loading...