কম্পিউটার টিউটোরিয়াল

C-তে fork() এবং pipe() ব্যবহার করে ইন্টার-প্রসেস কমিউনিকেশন

fork() এবং pipe() ব্যবহার করে দুটি প্রসেসের মধ্যে কমিউনিকেশন ডেমো: প্যারেন্ট (P1) ইনপুট নেয়, চাইল্ড (P2)-এ পাইপ দিয়ে পাঠায়, P2 একটি ফিক্সড স্ট্রিং কনক্যাট করে আবার পাইপ দিয়ে পাঠায়, P1 প্রিন্ট করে।

fork() ও pipe() সংক্ষিপ্ত

  • fork(): চাইল্ড প্রসেস তৈরি করে। রিটার্ন <0 (ফেইল), =0 (চাইল্ড), >0 (প্যারেন্টে চাইল্ডের PID)।
  • pipe(): ইউনিক্স/লিনাক্স সিস্টেম কল, ইন্টার-প্রসেস কমিউনিকেশনের জন্য। One-way।

উদাহরণ

ইনপুট: "Learn programming" (P1-এ)

ফিক্সড স্ট্রিং: " at tutorialspoint" (P2-এ)

আউটপুট: "Learn programming at tutorialspoint"

পদ্ধতি

  • দুটি পাইপ: p12 (P1→P2), p21 (P2→P1)।
  • fork() কল করে P1 (প্যারেন্ট) এবং P2 (চাইল্ড) তৈরি।
  • P1: ইনপুট পড়ে p12-এ লিখে, wait(), p21-এ পড়ে প্রিন্ট।
  • P2: p12-এ পড়ে, কনক্যাট করে, p21-এ লিখে, exit।

C প্রোগ্রাম উদাহরণ

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
#include <sys/wait.h>

int main() {
    int p12[2], p21[2];
    char fixed_str[] = " at tutorialspoint";
    char input_str[100];
    pid_t P;
    if (pipe(p12)==-1 || pipe(p21)==-1) { perror("pipe"); return 1; }
    scanf("%s", input_str);
    P = fork();
    if (P < 0) { perror("fork"); return 1; }
    else if (P > 0) { /* Parent */
        close(p12[0]);
        write(p12[1], input_str, strlen(input_str)+1);
        close(p12[1]);
        wait(NULL);
        char concat_str[100];
        close(p21[1]);
        read(p21[0], concat_str, 100);
        printf("Concatenated string: %s\n", concat_str);
        close(p21[0]);
    } else { /* Child */
        close(p12[1]);
        char concat_str[100];
        read(p12[0], concat_str, 100);
        int k = strlen(concat_str);
        for (int i=0; fixed_str[i]; i++) concat_str[k++] = fixed_str[i];
        concat_str[k] = '\0';
        close(p12[0]);
        close(p21[0]);
        write(p21[1], concat_str, strlen(concat_str)+1);
        close(p21[1]);
        exit(0);
    }
    return 0;
}

আউটপুট

Concatenated string: Learn at tutorialspoint
  1. দিয়ে স্ট্রিং থেকে n ক্যারেক্টার ডিলিট করার সি প্রোগ্রাম

  2. সি প্রোগ্রাম দিয়ে nCr এবং nPr বের করা

  3. C প্রোগ্রাম: পোস্ট-ইনক্রিমেন্ট ও প্রি-ইনক্রিমেন্ট অপারেটর প্রদর্শন

  4. স্ট্রিংয়ের পয়েন্টার অ্যারে এবং তাদের অ্যাড্রেস প্রিন্ট করার C প্রোগ্রাম