Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

विंडोज बेनामी पाइप

विंडोज़ अनाम पाइप वास्तव में साधारण पाइप हैं, और वे अपने यूनिक्स समकक्षों के समान व्यवहार करते हैं:वे यूनिडायरेक्शनल हैं और संचार प्रक्रियाओं के बीच अभिभावक-बाल संबंधों को नियोजित करते हैं। इसके अलावा, पाइप को पढ़ना और लिखना सामान्य रीडफाइल () और राइटफाइल () फ़ंक्शन के साथ पूरा किया जा सकता है। विंडोज एपीआई पाइप बनाने के लिए 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;
}

Windows अनाम पाइप - मूल प्रक्रिया

पाइप को लिखने से पहले पैरेंट पहले पाइप के अप्रयुक्त रीड एंड को बंद कर देता है। पाइप से पढ़ने वाली चाइल्ड प्रोसेस को नीचे दिए गए कोड में दिखाया गया है -

#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. विंडोज़ को सी:/विंडोज़/regedit.exe नहीं मिल रहा है

    इस पोस्ट में, हम एक केस परिदृश्य पर चर्चा करते हैं और फिर त्रुटि संदेश का समाधान प्रदान करते हैं - Windows C:\Windows\regedit.exe नहीं ढूंढ सकता है जब आप अपना विंडोज 10 डिवाइस शुरू करते हैं या रजिस्ट्री संपादक को खोलने का प्रयास करते हैं तो आपको प्राप्त हो सकता है। Windows C:\Windows\regedit.exe न

  1. विंडोज 11 एसई क्या है?

    जबकि क्रोमबुक और क्रोम ऑपरेटिंग सिस्टम ज्यादातर शैक्षिक बाजार पर हावी है, माइक्रोसॉफ्ट काफी समय से खेल के मैदान में आने और इसे समतल करने का प्रयास कर रहा है। विंडोज 11 एसई के साथ, यह ठीक वैसा ही हासिल करने का इरादा रखता है। यह ऑपरेटिंग सिस्टम K-8 कक्षाओं . के साथ बनाया गया था मन में। यह सीमित क्षमता

  1. Windows 10 में चाइल्ड अकाउंट कैसे प्रबंधित करें

    पहले, हमने Windows 10 में विभिन्न प्रकार के खाते बनाने के लिए उपलब्ध विधियों के बारे में बात की थी और हमने यह भी दिखाया है कि इसे आपके कंप्यूटर में कैसे एक्सेस किया जा सकता है, लेकिन हम वास्तव में इस बात पर विस्तार से नहीं गए हैं कि आप अपने बच्चे के खाते को कैसे प्रबंधित कर सकते हैं। क्या आप जानते