#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
int
main(int argc, char **argv)
{
int pfds[ 2], i;
size_t pbytrd;
pid_t childpid;
char buffer[ 200];
pipe(pfds);
if((childpid = fork()) == -1)
{
perror("fork error: ");
exit(1);
}
else if(childpid == 0)
{
close(pfds[ 0]);
dup2(pfds[1], 1);
close(pfds[ 1]);
for(i = 0; i < 10; i++)
printf("Hello...");
execlp("xterm","xterm","-e","./sample_a", (char *) 0);
exit(0);
}
else
{
close(pfds[ 1]);
for(; ;)
{
if((pbytrd = read(pfds[ 0], buffer, sizeof(buffer))) == -1)
{
perror(" read error: ");
exit(1);
}
else if(pbytrd == 0)
{
write(fileno(stdout), "Cannot read from pipe...\n", strlen("Cannot read from pipe...\n"));
exit(0);
}
else
{
write(fileno(stdout), "MESSAGE: ", strlen("MESSAGE: "));
write(fileno(stdout), buffer, pbytrd);
}
}
}
return(0);
मेरे sample_a.c कोड के नीचे है:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
int
main(int argc, char **argv)
{
int i;
for(i= 0; i< 10; i++)
write(fileno(stdout), "Hello...", strlen("Hello..."));
return(0);
}
उपरोक्त कोड में, क्या मैं सच में करना चाहते हैं: 1) पुनर्निर्देशन बाल प्रक्रिया से पाइप तक उत्पादन और माता-पिता को पाइप से पढ़ा जाता है और इसे stdout पर प्रिंट करता है।
मैं stdout से पाइप तक बाल प्रक्रिया आउटपुट ("printf") को पुनर्निर्देशित करने में सक्षम हूं लेकिन मैं execlp की बाल प्रक्रिया, xterm, आउटपुट को पाइप पर रीडायरेक्ट करने में सक्षम नहीं हूं।
क्या कोई मेरी मदद कर सकता है?
से सहमत हैं, मैं सहमत हूं, अगर मैं xterm भाग को हटा दूंगा तो यह काम करेगा। यह एक प्रोग्रामिंग प्रश्न है जिसे मैंने विश्वविद्यालय की वेबसाइट पर देखा था। व्यायाम xterm विंडो पर उपयोगकर्ता से इनपुट स्वीकार करता है और xterm पर आउटपुट प्रदर्शित करता है लेकिन टर्मिनल विंडो पर किसी भी त्रुटि (पेरर) को मुद्रित किया जाना चाहिए जहां से इसे कहा जाता है। तो क्या कोई रास्ता नहीं है xterm टर्मिनल विंडो पर वापस संवाद कर सकता है? असल में यह बड़ी समस्या का एक छोटा सा हिस्सा है (5-6 पेज समस्या)। उम्मीद है की यह मदद करेगा –