मैं रीडायरेक्ट कैसे करूं "प्रणाली" कॉल आउटपुट?


संलग्न स्निपेट काम करता है और QtCreator “कंसोल” पर “प्रिंट” करता है।
मुझे इसके आउटपुट को आवश्यकतानुसार रीडायरेक्ट करने की आवश्यकता है…अभी के लिए “परिणाम” पर…

कोबोल
int RESULT = system(" echo q  | sudo -S hcitool info 98:D3:31:F8:39:33 ") ;
                          if(RESULT == 0)
                          {
                              text = " SUCCESS ";
                              text += "Elapsed time ";
                              text += QString::number(QET->elapsed());
                              text += "  mS ";
                              ui->textEdit->append(text);
                              qDebug() << text;
                              ui->textEdit->append(result);
                              qDebug() << result;
                          }

मैंने क्या प्रयास किया है:

सी++
int RESULT = system(" echo q  | sudo -S hcitool info 98:D3:31:F8:39:33  > result") ;

इस तरह से रीडायरेक्ट करने से कंसोल से आउटपुट बंद हो गया और “परिणाम” में कोई मान नहीं रह गया।

“| > परिणाम ” जोड़ने से कोई मदद नहीं मिली/

समाधान 1

सिस्टम() का प्रयोग न करें। पॉपेन() का उपयोग करें: पोपेन(3) – लिनक्स मैनुअल पेज[^]

वैकल्पिक रूप से QProcess को वही करना चाहिए जो आप चाहते हैं।
या boost::process() : अध्याय 28. बूस्ट.प्रक्रिया – 1.84.0[^]

समाधान 2

K5054 ने जो कहा उसमें जोड़ने के लिए, “> परिणाम” जोड़ने का कारण काम नहीं आया, वह कॉलिंग है system एक ऐसी प्रक्रिया शुरू करता है जो आपके ऐप से बाहर है – इसलिए इसकी आपकी मेमोरी तक पहुंच नहीं है। सिर्फ इसलिए कि नाम “परिणाम” आपके ऐप में एक वेरिएबल के समान है, इसका मतलब यह नहीं है कि नई प्रक्रिया आपके ऐप को किसी भी तरह से संशोधित कर सकती है।
इसे जोड़ने से मानक आउटपुट स्ट्रीम को वर्तमान कार्यशील निर्देशिका में “परिणाम” नामक फ़ाइल पर रीडायरेक्ट करने की नई प्रक्रिया बताई जाती है, यही कारण है कि इसने “कंसोल से आउटपुट रोक दिया” लेकिन आप परिणाम नहीं देख सके। आप फ़ाइल तक पहुंचने के लिए उसे पढ़ सकते थे, लेकिन फिर आपको यह जानना होगा कि प्रक्रिया कब समाप्त हुई क्योंकि तब तक फ़ाइल पढ़ने योग्य नहीं होगी।

コメント

タイトルとURLをコピーしました