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

C प्रोग्राम fork() और pipe() को प्रदर्शित करने के लिए


इस समस्या में, हम fork() और pipe() को प्रदर्शित करेंगे। यहां हम लिनक्स के लिए एक C प्रोग्राम बनाएंगे जो दो स्ट्रिंग को जोड़ेगा, 2 प्रक्रियाओं का उपयोग करके एक इनपुट लेगा और इसे दूसरे को भेजेगा जो स्ट्रिंग को एक पूर्वनिर्धारित स्ट्रिंग के साथ जोड़कर संयुक्त स्ट्रिंग लौटाएगा।

पहले आइए fork() और pipe() का पुनर्कथन करें

fork() - यह एक चाइल्ड प्रक्रिया बनाता है, इस चाइल्ड प्रक्रिया का एक नया PID और PPID होता है।

pipe() एक यूनिक्स, लिनक्स सिस्टम कॉल है जिसका उपयोग अंतर-प्रक्रिया संचार के लिए किया जाता है।

समस्या को समझने के लिए एक उदाहरण लें,

इनपुट

Learn programming पूर्वनिर्धारित स्ट्रिंग: at tutorialspoint

आउटपुट

Learn programming at tutorialspoint

व्याख्या

P1 स्ट्रिंग "learn programming" का इनपुट लेता है

इसे पाइप का उपयोग करके P2 को भेजता है।

P2 स्ट्रिंग को जोड़ता है और P1 को वापस भेजता है जो इसे प्रिंट करता है।

प्रोग्राम में, हम fork() फ़ंक्शन का उपयोग करके दो प्रक्रियाएं बनाएंगे, मान लीजिए P1 और P2। इसके निम्नलिखित तीन रिटर्न मान हैं जो प्रोग्राम की स्थिति दिखाते हैं।

रिटर्न मान < 0, प्रक्रिया निर्माण विफल।

रिटर्न मान = 0, चाइल्ड प्रक्रिया।

रिटर्न मान > 0, जो पैरेंट प्रक्रिया के लिए चाइल्ड प्रक्रिया की प्रक्रिया आईडी होगी यानी पैरेंट प्रक्रिया निष्पादित होगी।

हम दो पाइप बनाएंगे एक P1 से P2 के लिए संचार के लिए और दूसरा P2 से P1 के लिए क्योंकि पाइप एक तरफा है।

fork() और pipe() को प्रदर्शित करने के लिए 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];     int p21[2];     char fixed_str[] = " at tutorialspoint";     char input_str[100];     pid_t P;     if (pipe(p12) == -1 || pipe(p21) == -1 ){         fprintf(stderr, "पाइप बनाने में विफल" );         return 1;     }     scanf("%s", input_str);     P = fork();     if (P < 0){         fprintf(stderr, "फोर्क विफल" );         return 1;     }     else if (P > 0){         char concat_str[100];         close(p12[0]);         write(p12[1], input_str, strlen(input_str) + 1);         close(p12[1]);         wait(NULL);         close(p21[1]);         read(p21[0], concat_str, 100);         printf("संयुक्त स्ट्रिंग %s\n", concat_str);         close(p21[0]);     }     else{         close(p12[1]);         char concat_str[100];         read(p12[0], concat_str, 100);         int k = strlen(concat_str);         int i;         for (i = 0; i < strlen(fixed_str); 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; }

आउटपुट

संयुक्त स्ट्रिंग Learn at tutorialspoint
  1. - nCr और nPr ज्ञात करने का C प्रोग्राम

    C प्रोग्रामिंग भाषा में, nCr को कॉम्बिनेशन कहा जाता है। nCr, n ऑब्जेक्ट्स के एक सेट से r ऑब्जेक्ट्स का चयन है, जहां ऑब्जेक्ट्स का क्रम मायने नहीं रखता। nPr को परम्यूटेशन कहा जाता है। nPr, n ऑब्जेक्ट्स के एक सेट से r ऑब्जेक्ट्स की व्यवस्था है, जो एक क्रम या अनुक्रम में होनी चाहिए। परम्यूटेशन और कॉम

  1. - C प्रोग्राम: पोस्ट-इन्क्रीमेंट और प्री-इन्क्रीमेंट ऑपरेटर्स का प्रदर्शन

    इन्क्रीमेंट ऑपरेटर (++) यह वेरिएबल के मान को 1 से बढ़ाने के लिए उपयोग किया जाता है। इन्क्रीमेंट ऑपरेटर दो प्रकार के होते हैं: प्री-इन्क्रीमेंट और पोस्ट-इन्क्रीमेंट। प्री-इन्क्रीमेंट में इन्क्रीमेंट ऑपरेटर ऑपरेंड से पहले रखा जाता है और मान पहले बढ़ाया जाता है फिर उस पर ऑपरेशन किया जाता है। उदाहरण

  1. C प्रोग्राम: स्ट्रिंग्स के पॉइंटर्स की सरणी और उनके पते प्रिंट करें C प्रोग्राम: स्ट्रिंग्स के पॉइंटर्स की सरणी और उनके पते प्रिंट करें

    C प्रोग्रामिंग में पॉइंटर्स की सरणी (array of pointers) को समझते हैं, विशेष रूप से स्ट्रिंग्स के लिए। पॉइंटर्स की सरणी (स्ट्रिंग्स के लिए) यह एक सरणी है जिसके तत्व स्ट्रिंग के बेस पते को इंगित करने वाले पॉइंटर्स होते हैं। घोषणा और आरंभीकरण: char *a[] = {one, two, three}; यहाँ: a[0] one स्ट्रिं