2011-10-20 17 views
9

वर्तमान में लौटने के लिए, मैं शेल कमांड लाइन अमानक प्रणाली आंतरिक दिनचर्या (फोरट्रान 2008 EXECUTE_COMMAND_LINE आंतरिक के लिए इसी तरह) का उपयोग कर मेरी fortran कार्यक्रम से कॉल का उपयोग कर रहा:कमांड लाइन निष्पादित और आदेश उत्पादन

CALL SYSTEM(commandStr) 

commandStr जहां एक है अक्षर स्ट्रिंग जिसमें शेल कमांड है जिसे मैं निष्पादित करना चाहता हूं। फिलहाल, मुझे कमांड एसआरटी के आउटपुट को वापस करने के प्रत्यक्ष तरीके से अवगत नहीं है, लेकिन केवल इसकी वापसी की स्थिति है। तो, अब मैं एक फाइल में आउटपुट लिख रहा हूं, और फिर फोरट्रान कार्यक्रम के भीतर से फ़ाइल पढ़ रहा हूं। उदाहरण:

CALL SYSTEM('sed ''s/,//g'' myFile > dummyFile') 

अगर मैं myFile से अल्पविराम को हटाना चाहता हूं। मैं फिर डमीफाइल की सामग्री प्राप्त करने के लिए खोलें और पढ़ें।

यह सिर्फ ठीक काम करता है, फिर भी मैं लेखन के बारे में चिंतित हूँ/डिस्क से फाइल पढ़ने, खासकर अगर मैं एक लंबे पाश के भीतर इस कर रहा था, और अगर commandStr उत्पादन बड़ा था। क्या कमांडएसआर आउटपुट को मेमोरी बफर (हार्ड डिस्क नहीं) में फिर से निर्देशित करने का कोई तरीका है जिसे मैं सीधे अपने फोरट्रान प्रोग्राम से एक्सेस कर सकता हूं (शायद एक विशिष्ट यूएनआईटी नंबर के माध्यम से)?

+0

यदि आउटपुट बड़ा था, तो क्या इसे फ़ाइल में संग्रहीत करने के लिए और अधिक समझदारी नहीं होगी? – Rook

+0

मुझे लगता है कि यह कोड के लिए कोई फर्क नहीं पड़ेगा - केवल एकमात्र हिस्सा जो मैं चिंता करता हूं वह प्रोग्राम दक्षता को प्रभावित करने वाली डिस्क से लगातार I/O होता है। क्या ऐसा कोई कारण है कि इसे फाइल में स्टोर करना बेहतर होगा, जो कुछ मुझे याद आ रहा है? – milancurcic

+1

ठीक है, मेरे दृष्टिकोण से यह सिर्फ एक व्यावहारिक मुद्दा है। यदि यह बहुत अधिक डेटा नहीं है, तो इसे किसी फ़ाइल में संग्रहीत करना कोई फर्क नहीं पड़ता। यह बहुत सारे डेटा है, और मैं इसे वर्तमान चल रहे प्रोग्राम में पुन: उपयोग कर रहा हूं, आखिरी जगह जहां मैं चाहता हूं कि यह स्मृति है। मुझे फ़ाइल को "पार्सिंग" के परिणामों को संग्रहीत करने के लिए स्मृति की आवश्यकता है, और उसके बाद कुछ करने के लिए। यह शायद बेहतर समझाया जा सकता है लेकिन मुझे लगता है कि आपको विचार मिलता है। – Rook

उत्तर

1

इस एक POSIX वातावरण में है, तो पुस्तकालय समारोह popen() भी उपलब्ध हो सकता है।

iunit = popen ('sed ''s/,//g'' myFile', 'r') 

अपने फोरट्रान पर्यावरण के लिए प्रलेखन के बाद से मैं मैं जोड़ने/फोरट्रान को ओ के लिए अर्थ विज्ञान का यकीन नहीं है पर देखो। यदि यह सी रनटाइम लाइब्रेरी की तरह है, तो फ़ाइल कनेक्शन को इसे बंद करने के लिए एक विशेष फ़ंक्शन की भी आवश्यकता है, pclose()

+1

आप ISO_C_Binding के माध्यम से पॉज़िक्स सामान का उपयोग कर सकते हैं, इसके साथ संबंधित एक परियोजना है: http://sourceforge.net/projects/fortranposix/ – haraldkl

संबंधित मुद्दे