दिलचस्प पोस्ट
पायथन में "कब" या "के लिए" का उपयोग करने के लिए SQLite स्कीमा सूचना मेटाडेटा ग्रैडल डीएसएल विधि नहीं मिली: 'रनप्रागार्ड' निश्चित रूप से ईएस 6 + दो जावास्क्रिप्ट ऑब्जेक्ट को एक साथ मर्ज करने का एक तरीका होगा, यह क्या है? क्या शॉर्ट सर्किटिंग लॉजिकल ऑपरेटर अनिवार्य है? और मूल्यांकन आदेश? जांचें कि पंक्ति mysql के साथ मौजूद है या नहीं सीआरएल और पीएचपी का इस्तेमाल करके एफटीपी से एक फाइल डाउनलोड करें विम ~ एक्सटेंशन के साथ फाइल क्यों सहेजता है? लुआ गणित.रेंडम काम नहीं कर रहा है स्थानीय .aar फ़ाइलों को "फ्लैटडिआईर्स" का उपयोग करके ग्रैडल बिल्डिंग में जोड़ना काम नहीं कर रहा है यूआरएल पर क्लिक करना डिफ़ॉल्ट ब्राउज़र खोलता है सफ़ारी और क्रोम में jQuery का काम नहीं कर रहा फोकस पर टेक्स्ट का चयन करना URL को HTML लिंक के साथ टेक्स्ट में बदलें Backbone.js पैरामीटर के साथ फ़ेच करें मैं एक जावास्क्रिप्ट ऑब्जेक्ट के माध्यम से कैसे लूप कर सकता / सकती हूं?

सी में आप stdin / stdout / stderr को एक execvp () या समान कॉल करते समय फ़ाइलों में कैसे रीडायरेक्ट करते हैं?

मेरे पास निम्न कोड है:

pid_t pid = fork(); if (pid == -1) { // ... } else if (pid == 0) { stdin = someopenfile; stdout = someotherfile; stderr = somethirdopenfile; execvp(args[0], args); // handle error ... } else { // ... } 

समस्या यह है कि, execvp() कॉल के इनपुट / आउटपुट अभी भी फाइलों के बजाय कंसोल है स्पष्ट रूप से मैं कुछ गलत कर रहा हूं, ऐसा करने का सही तरीका क्या है?

वेब के समाधान से एकत्रित समाधान "सी में आप stdin / stdout / stderr को एक execvp () या समान कॉल करते समय फ़ाइलों में कैसे रीडायरेक्ट करते हैं?"

ऐसा करने का सही तरीका है कि फाइल डिस्क्रिप्टर STDIN_FILENO , STDOUT_FILENO और STDERR_FILENO को dup2() का इस्तेमाल करते हुए खोले गए फाइलों के साथ dup2() । आपको बाल प्रक्रिया में मूल फ़ाइलों को भी बंद करना चाहिए:

 else if (pid == 0) { dup2(fileno(someopenfile), STDIN_FILENO); dup2(fileno(someotherfile), STDOUT_FILENO); dup2(fileno(somethirdopenfile), STDERR_FILENO); fclose(someopenfile); fclose(someotheropenfile); fclose(somethirdopenfile); execvp(args[0], args); // handle error ... } 

freopen फ़ंक्शन पर एक नज़र डालें

मुझे stdout समान कुछ करना था और मेरे लिए काम करने वाले दो कार्यों को लिखा था:

 static int fd; static fpos_t pos; void switchStdout(const char *newStream) { fflush(stdout); fgetpos(stdout, &pos); fd = dup(fileno(stdout)); freopen(newStream, "w", stdout); } void revertStdout() { fflush(stdout); dup2(fd, fileno(stdout)); close(fd); clearerr(stdout); fsetpos(stdout, &pos); } 

आप इसका उपयोग तब कर सकते हैं जब stdin, stdout, stderr टर्मिनल-

 //change stdin,stdout,stderr freopen("new_stdin","r",stdin); freopen("new_stdout","r",stdout); freopen("new_stderr","r",stderr); //----do something; //reset stdin,stdout,stderr freopen("/dev/tty","r",stdin); freopen("/dev/tty","r",stdout); freopen("/dev/tty","r",stderr);