में प्रक्रियाओं के बीच बाइनरी डेटा का आदान-प्रदान कैसे करें मुझे एक लिनक्स एप्लिकेशन बनाना होगा जो वायरलेस नेटवर्क स्कैनिंग करेगा, नतीजे को एक संरचना में डालें और इसे किसी अन्य तरीके से भेजें, मुख्य एप्लिकेशन जो डेटा का उपयोग करेगा। मेरा प्रारंभिक विचार मुख्य अनुप्रयोग, कांटा में एक पाइप बनाना था और execl द्वारा एक और प्रक्रिया शुरू करना था, जो पाइप को लिख सकता है। इस तरह कुछ:लिनक्स
pid_t pid = NULL;
int pipefd[2];
FILE* output;
char line[256];
pipe(pipefd);
pid = fork();
if (pid == 0)
{
// Child
close(pipefd[0]);
dup2(pipefd[1], STDOUT_FILENO);
dup2(pipefd[1], STDERR_FILENO);
execl("/sbin/wifiscan", "/sbin/wifiscan", (char*) NULL);
}
//Only parent gets here. Listen to what the wifi scan says
close(pipefd[1]);
output = fdopen(pipefd[0], "r");
while(fgets(line, sizeof(line), output))
{
//Here we can listen to what wifiscan sends to its standard output
}
हालांकि यह बाइनरी डेटा के साथ काम नहीं करेगा, अगर उत्पादन में बाइनरी 0 दिखाई देता है। तो मैं या तो वाईफिसन एप्लिकेशन के आउटपुट को पाठ में प्रारूपित कर सकता हूं, इसे मुख्य एप्लिकेशन में पाइप और पार्स पर भेज सकता हूं, या इसे स्मार्ट तरीके से कर सकता हूं जिसे मैं अभी तक नहीं जानता।
लिनक्स में प्रक्रियाओं के बीच डेटा का विश्वसनीय रूप से विनिमय करने के अन्य साधन क्या हैं?
'ftell() 'पाइप जैसे अवांछित धाराओं पर काम करने की संभावना नहीं है, वैसे भी। – caf
मैं आपके डेटा के लिए मूल प्रोटोकॉल बनाने और फिर 'fgets() 'के बजाय' fread()' का उपयोग करने के साथ सहमत हूं। यह [उत्तर] (http://stackoverflow.com/questions/2870549/fifos-implementation/2871538#2871538) [एफआईएफओ कार्यान्वयन] पर एक प्रश्न के लिए (http://stackoverflow.com/q/2870549/203667) अतिरिक्त उपयोग हो सकता है क्योंकि यह कुछ उदाहरण प्रदान करता है कि इस तरह के प्रोटोकॉल का निर्माण कैसे किया जा सकता है। – jschmier
फ़्रेड() सही काम करता है। धन्यवाद – Patryk