मैं कुछ सी सीखना शुरू कर रहा हूं और कांटा का अध्ययन करते समय, मुझे एक अप्रत्याशित आउटपुट में मिलने वाले कार्यों का इंतजार करना है। कम से कम मेरे लिए।केवल 2 बाल प्रक्रियाओं को बनाने के लिए फोर्क() का उपयोग कैसे करें?
क्या माता-पिता से केवल 2 बाल प्रक्रियाएं बनाने का कोई तरीका है?
यहाँ मेरी कोड:
I'm pid 6763
I'm pid 6765
I'm pid 6764
I'm pid 6766
कृपया,, पाइप हिस्सा उपेक्षा मुझे लगता है कि अब तक अभी तक नहीं मिला है:
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
/* Create the pipe */
int fd [2];
pipe(fd);
pid_t pid;
pid_t pidb;
pid = fork();
pidb = fork();
if (pid < 0)
{
printf ("Fork Failed\n");
return -1;
}
else if (pid == 0)
{
//printf("I'm the child\n");
}
else
{
//printf("I'm the parent\n");
}
printf("I'm pid %d\n",getpid());
return 0;
}
और यहाँ मेरी उत्पादन होता है। मैं केवल 2 बाल प्रक्रियाओं को बनाने की कोशिश कर रहा हूं, इसलिए मुझे उम्मीद है कि 3 "मैं पिड हूं ..." केवल माता-पिता के लिए आउटपुट करता है जो मैं इंतजार करूँगा और 2 बाल प्रक्रियाएं जो पाइप के माध्यम से संवाद करेगी।
मुझे बताएं कि क्या आप देखते हैं कि मेरी त्रुटि कहां है।
'कांटा (2)' दोनों बहुत ही सरल और यूनिक्स एपीआई में सबसे ग़लत समझा कॉल से एक है। बस "संबंधित" साइडबार देखें। क्या कोई विशेष कारण है कि आप दो बच्चों के बीच संचार चाहते हैं, न कि माता-पिता और बच्चे के बीच? – dmckee
फोर्क() कॉल के लिए आप pid == 0 क्यों जांच रहे हैं? मुझे कैसे पता चलेगा कि कौन सा माता पिता है और कौन सा बच्चा है? – TwilightSparkleTheGeek
@TwilightSparkleTheGeek 'man fork' राज्य: वापसी मूल्य सफलता पर, बच्चे की प्रक्रिया का पीआईडी माता-पिता में वापस कर दिया जाता है, और 0 बच्चे में वापस आ जाता है। विफलता पर, -1 माता-पिता में वापस आ गया है, कोई बाल प्रक्रिया नहीं बनाई गई है, और इरनो उचित रूप से सेट है। – mimoralea