विंडोज़ पर आपको STARTUPINFO
को CreateProcess
के लिए स्टैंडअर्ट स्ट्रीम पकड़ने के लिए भरना होगा, और आप समाप्ति स्थिति प्राप्त करने के लिए GetExitCodeProcess
फ़ंक्शन का उपयोग कर सकते हैं। एक उदाहरण है कि कैसे माता पिता प्रक्रिया http://msdn.microsoft.com/en-us/library/windows/desktop/ms682499.aspx
लिनक्स-जैसा ओएस आप शायद fork
बजाय execve
उपयोग करना चाहते हैं पर में standart धाराओं रीडायरेक्ट करने के लिए नहीं है, और एक काँटेदार प्रक्रिया के साथ काम कर एक और कहानी है।
विंडोज और लिनक्स रीडायरेक्टिंग स्ट्रीम में सामान्य दृष्टिकोण है - आपको कई पाइप (प्रत्येक स्ट्रीम के लिए एक) बनाना होगा और बाल प्रक्रिया धाराओं को उस पाइप में पुनर्निर्देशित करना होगा, और मूल प्रक्रिया उस पाइप से डेटा पढ़ सकती है। लिनक्स के लिए
नमूना कोड:
int fd[2];
if (pipe(fd) == -1) {
perror("pipe");
exit(EXIT_FAILURE);
}
pid_t cpid = fork();
if (cpid == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
if (cpid == 0) { // child
dup2(fd[1], STDERR_FILENO);
fprintf(stderr, "Hello, World!\n");
exit(EXIT_SUCCESS);
} else { // parent
char ch;
while (read(fd[0], &ch, 1) > 0)
printf("%c", ch);
exit(EXIT_SUCCESS);
}
संपादित करें: आप किसी अन्य प्रोग्राम से नदियों को पकड़ने के लिए की जरूरत है, एक ही stragey के रूप में ऊपर, पहले fork
, दूसरे का उपयोग करें - उपयोग पाइप (ऊपर कोड के रूप में)
int status;
if (waitpid(cpid, &status, 0) < 0) {
perror("waitpid");
exit(EXIT_FAILURE);
}
आप आदमी पृष्ठों ०१२३०३८०९५८९ में और अधिक जानकारी प्राप्त कर सकते हैं: है, तो execve
बच्चे की प्रक्रिया में एक और progrram और इस कोड को माता पिता प्रक्रिया में एक निष्पादन अंत तक प्रतीक्षा करें और एक वापसी कोड को पकड़ने के लिए उपयोग करें, dup2 और waitpid।
क्या ओएस? और उन्हें एक साथ पकड़ने के लिए आप क्या जानते हैं? – ybungalobill
मैं उबंटू का उपयोग कर रहा हूं और मुझे पता है कि मैं 2> और 1 का उपयोग कर सकता हूं। लेकिन मैं उन्हें अलग करना चाहता हूं। धन्यवाद –
इस उत्तर को देखें: http://stackoverflow.com/a/12839498/1741542 –