popen
निश्चित रूप से वह काम करता है जिसे आप ढूंढ रहे हैं, लेकिन इसमें कुछ कमियां हैं:
- यह आदेश आप को क्रियान्वित कर रहे हैं पर एक खोल invokes (जिसका अर्थ है कि आप किसी भी उपयोगकर्ता प्रदान की कमान तार untaint करने की जरूरत है)
- यह केवल एक ही दिशा में काम करता है, या तो आप उपप्रक्रिया के लिए इनपुट प्रदान कर सकते हैं या आप इसके आउटपुट पढ़ सकते हैं।
आप तो एक उपप्रक्रिया आह्वान और इनपुट प्रदान और कब्जा उत्पादन चाहते हैं तो आप कुछ इस तरह करना होगा:
int Input[2], Output[2];
pipe(Input);
pipe(Output);
if(fork())
{
// We're in the parent here.
// Close the reading end of the input pipe.
close(Input[ 0 ]);
// Close the writing end of the output pipe
close(Output[ 1 ]);
// Here we can interact with the subprocess. Write to the subprocesses stdin via Input[ 1 ], and read from the subprocesses stdout via Output[ 0 ].
...
}
else
{ // We're in the child here.
close(Input[ 1 ]);
dup2(Input[ 0 ], STDIN_FILENO);
close(Output[ 0 ]);
dup2(Output[ 1 ], STDOUT_FILENO);
execlp("ls", "-la", NULL);
}
बेशक
, आप अन्य कार्यकारी से किसी के साथ execlp
जगह ले सकता है उपयुक्त के रूप में कार्य करता है।
स्रोत
2009-03-23 02:03:11
@ मेहरदाद के लिंक को देखें, इसका उदाहरण ls =) – bayda