इस समस्या में, हम 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