मैं इस कोड के साथ कुछ समस्या प्रयोग कर रहा हूँ:पाइप कॉल और तुल्यकालन
#include <stdio.h>
#include <stdlib.h>
#define SIZE 30
#define Error_(x) { perror(x); exit(1); }
int main(int argc, char *argv[]) {
char message[SIZE];
int pid, status, ret, fd[2];
ret = pipe(fd);
if(ret == -1) Error_("Pipe creation");
if((pid = fork()) == -1) Error_("Fork error");
if(pid == 0){ //child process: reader (child wants to receive data from the parent)
close(fd[1]); //reader closes unused ch.
while(read(fd[0], message, SIZE) > 0)
printf("Message: %s", message);
close(fd[0]);
}
else{//parent: writer (reads from STDIN, sends data to the child)
close(fd[0]);
puts("Tipe some text ('quit to exit')");
do{
fgets(message, SIZE, stdin);
write(fd[1], message, SIZE);
}while(strcmp(message, "quit\n") != 0);
close(fd[1]);
wait(&status);
}
}
कोड ठीक काम करता है, लेकिन मैं क्यों की व्याख्या नहीं कर सकते हैं! माता-पिता और बाल प्रक्रियाओं के बीच कोई स्पष्ट सिंक नहीं है। यदि बच्चे-प्रक्रिया माता-पिता के सामने निष्पादित होती है, तो पढ़ना चाहिए 0 को वापस करना होगा और प्रक्रिया समाप्त होती है, लेकिन किसी कारण से यह माता-पिता निष्पादन की प्रतीक्षा करता है। यह आपके द्वारा कैसे समझाया जाता है? शायद मुझे कुछ याद आ रही है।
(संपादित)
आप 0 को वापस पढ़ने की उम्मीद क्यों करते हैं? आप कहीं भी गैर-अवरुद्ध I/O सेट नहीं कर रहे हैं। – Mat
... और यह गैर-अवरुद्ध I/O के लिए भी 0 नहीं होगा। –
प्रक्रिया के लिए 'पढ़ा' अवरुद्ध है? –