কম্পিউটার

উইন্ডোজ বেনামী পাইপ


উইন্ডোজ বেনামী পাইপগুলি আসলে সাধারণ পাইপ, এবং তারা তাদের ইউনিক্স প্রতিপক্ষের মতোই আচরণ করে:তারা একমুখী এবং যোগাযোগ প্রক্রিয়ার মধ্যে পিতামাতা-সন্তানের সম্পর্ককে নিয়োগ করে। উপরন্তু, পাইপ পড়া এবং লেখা সাধারণ ReadFile() এবং WriteFile() ফাংশন দিয়ে সম্পন্ন করা যেতে পারে। উইন্ডোজ এপিআই পাইপ তৈরির জন্য CreatePipe() ফাংশন ব্যবহার করে, যা চারটি পরামিতি অতিক্রম করে। পরামিতিগুলি

-এর জন্য পৃথক হ্যান্ডেলগুলি প্রদান করে
  • পড়া এবং

  • পাইপে লেখা

  • STARTUPINFO কাঠামোর একটি উদাহরণ, যা নির্দিষ্ট করতে ব্যবহৃত হয় যে শিশু প্রক্রিয়াটি পাইপের হ্যান্ডেলগুলিকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়৷

  • পাইপের আকার (বাইটে) নির্দিষ্ট করা যেতে পারে।

ইউনিক্স সিস্টেমের বিপরীতে, শিশু প্রক্রিয়াটি কোন বৈশিষ্ট্যগুলি উত্তরাধিকারী হবে তা উইন্ডোজের প্রোগ্রামারকে নির্দিষ্ট করতে হবে। এটি প্রথমে সিকিউরিটি অ্যাট্রিবিউটস স্ট্রাকচার শুরু করার মাধ্যমে সম্পন্ন হয় যা হ্যান্ডেলগুলিকে উত্তরাধিকার সূত্রে প্রাপ্ত করার অনুমতি দেয় এবং তারপরে পাইপের রিড বা রাইট হ্যান্ডেলে স্ট্যান্ডার্ড ইনপুট বা স্ট্যান্ডার্ড আউটপুটের জন্য চাইল্ড প্রক্রিয়ার হ্যান্ডেলগুলিকে পুনঃনির্দেশিত করে। যেহেতু শিশু পাইপ থেকে পড়বে, অভিভাবককে অবশ্যই শিশুর স্ট্যান্ডার্ড ইনপুটটি পাইপের রিড হ্যান্ডেলে রিডাইরেক্ট করতে হবে। যেহেতু পাইপগুলো অর্ধেক ডুপ্লেক্স, তাই শিশুকে পাইপের লিখন-এন্ড উত্তরাধিকার সূত্রে পেতে নিষেধ করতে হবে।

নীচের কোডে, আমরা দেখতে পাচ্ছি একটি অভিভাবক প্রক্রিয়া তার সন্তানের সাথে যোগাযোগের জন্য একটি বেনামী পাইপ তৈরি করছে -

উদাহরণ

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#define BUFFER SIZE 25
int main(VOID) {
   HANDLE ReadHandle, WriteHandle;
   STARTUPINFO si;
   PROCESS INFORMATION pi;
   char message[BUFFER SIZE] = "Greetings";
   DWORD written;
   /* set up security attributes to allow pipes to be inherited */
   SECURITY ATTRIBUTES sa = {sizeof(SECURITY ATTRIBUTES), NULL, TRUE};
   /* allocate memory */
   ZeroMemory(π, sizeof(pi));
   /* create the pipe */
   if (!CreatePipe(&ReadHandle, &WriteHandle, &sa, 0)) {
   fprintf(stderr, "Create Pipe Failed"); return 1; }
   /* establishing the START INFO structure for the child process*/
   GetStartupInfo(&si);
   si.hStdOutput = GetStdHandle(STD OUTPUT HANDLE);
   /* redirecting standard input to the read end of the pipe */
   si.hStdInput = ReadHandle;
   si.dwFlags = STARTF USESTDHANDLES;
   /* don’t allow the child inheriting the write end of pipe */
   SetHandleInformation(WriteHandle, HANDLE FLAG INHERIT, 0);
   /* create the child process */
   CreateProcess(NULL, "child.exe", NULL, NULL, TRUE, /* inherit handles */ 0, NULL, NULL, &si, π);
   /* close the unused end of the pipe */ CloseHandle(ReadHandle);
   /* the parent writes to the pipe */
   if(!WriteFile(WriteHandle, message, BUFFER SIZE, &written, NULL))
   fprintf(stderr, "Error writing to pipe.");
   /* close the write end of the pipe */ CloseHandle(WriteHandle);
   /* wait for the child to exit */ WaitForSingleObject(pi.hProcess,INFINITE);        
   CloseHandle(pi.hProcess);
   CloseHandle(pi.hThread);
   return 0;
}

উইন্ডোজ বেনামী পাইপ - মূল প্রক্রিয়া

অভিভাবক প্রথমে পাইপে লেখার আগে পাইপের অব্যবহৃত রিড এন্ড বন্ধ করে দেন। পাইপ থেকে যে শিশু প্রক্রিয়াটি পড়ে তা নীচের কোডে দেখানো হয়েছে −

#include<stdio.h>
#include<windows.h>
#define BUFFER SIZE 25
int main(VOID){
   HANDLE Readhandle;
   CHAR buffer[BUFFER SIZE];
   DWORD read;
   /* getting the read handle of the pipe */
   ReadHandle = GetStdHandle(STD INPUT HANDLE);
   /* the child reads from the pipe */
   if (ReadFile(ReadHandle, buffer, BUFFER SIZE, &read, NULL))
      printf("child read %s", buffer);
   else
      fprintf(stderr, "Error reading from pipe");
   return 0;
}

উইন্ডোজ বেনামী পাইপ - চাইল্ড প্রক্রিয়া


  1. উইন্ডোজ 11-এ প্যারেন্টাল কন্ট্রোল কীভাবে সেট আপ এবং ব্যবহার করবেন

  2. উইন্ডোজ C:/Windows/regedit.exe খুঁজে পাচ্ছে না

  3. Windows 11 SE কি?

  4. Windows 10 এ কিভাবে একটি চাইল্ড অ্যাকাউন্ট পরিচালনা করবেন