इस समस्या में, हम कांटा () और पाइप () प्रदर्शित करेंगे। यहां हम लिनक्स के लिए एक सी प्रोग्राम बनाएंगे जो दो स्ट्रिंग को जोड़ देगा, 2 प्रक्रियाओं का उपयोग करके एक इनपुट लेगा और इसे दूसरों को भेज देगा जो स्ट्रिंग को एक पूर्वनिर्धारित स्ट्रिंग के साथ जोड़ देगा और कॉन्टेनेटेड स्ट्रिंग को वापस कर देगा।
सबसे पहले फोर्क () और पाइप () को फिर से तैयार करें
कांटा () - यह एक चाइल्ड प्रोसेस बनाता है, यह चाइल्ड प्रोसेस एक नया PID और PPID है।
पाइप () एक यूनिक्स, लिनक्स सिस्टम कॉल है जिसका उपयोग अंतर-प्रक्रिया संचार के लिए किया जाता है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट
Learn programming Predefined string: at tutorialspoint
आउटपुट
Learn programming at tutorialspoint
स्पष्टीकरण
P1 take input of string “learn programming”
इसे पाइप का उपयोग करके P2 को भेजता है।
P2 स्ट्रिंग्स को जोड़ता है और p1 को वापस भेजता है जो इसे प्रिंट करता है।
कार्यक्रम में, हम फोर्क () फ़ंक्शन का उपयोग करके दो प्रक्रियाएं बनाएंगे, P1 और P2 कहते हैं। इसमें निम्नलिखित तीन वापसी मान हैं जो कार्यक्रम की स्थिति दिखाते हैं।
वापसी मान <0, प्रक्रिया निर्माण विफल।
वापसी मूल्य =0, चाइल्ड प्रोसेस।
वापसी मूल्य> 0, जो मूल प्रक्रिया के लिए चाइल्ड प्रक्रिया की प्रक्रिया आईडी होगी यानी मूल प्रक्रिया निष्पादित की जाएगी।
हम दो पाइप बनाएंगे, एक P1 से P2 तक संचार के लिए और दूसरा P2 से P1 तक संचार के लिए क्योंकि पाइप एक तरफ है।
सी प्रोग्राम फॉर्क () और पाइप () को प्रदर्शित करने के लिए
उदाहरण
#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, "Filed to create pipe" ); return 1; } scanf("%s", input_str); P = fork(); if (P < 0){ fprintf(stderr, "fork Failed" ); 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("Concatenated string %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); } }
आउटपुट
Concatenated string Learn at tutorialspoint