2015-01-02 3 views
5

से मूल argv सूचक का उपयोग करें क्या यह Haskell main के भीतर से मूल argv सूचक तक पहुंच बनाना संभव है?हास्केल

मेरा उपयोग केस यह है कि एप्लिकेशन शुरू होने के बाद मैं कमांड लाइन पैरामीटर को हटाना चाहता हूं ताकि उन्हें ps के माध्यम से पढ़ा जा सके। ऐसा करने के कुछ तरीके हैं लेकिन सभी को मूल argv में हेरफेर करने की आवश्यकता है।

मैं अगर मैं एक सी आवरण बारे में ऐसा करते हैं और कहते हैं वहाँ से hs_init (बाद में argvhere आला के साथ आसपास mucking) करने में सक्षम हूँ, लेकिन यह हास्केल से यह करने के लिए अच्छे होगी।

धन्यवाद!

पीएस - यह प्रश्न duplicate से अलग है क्योंकि डुप्लिकेट prctl का उपयोग करता है, जहां तक ​​मैं कह सकता हूं, केवल आपको प्रक्रिया का नाम बदलने देता है। इसके अलावा, डुप्लिकेट argv[0] "सेट" करने की तलाश में है, जबकि मैं प्रोग्राम को कॉल करने के लिए उपयोग किए जाने वाले मूल argv पर एक म्यूटेबल संदर्भ प्राप्त करने का प्रयास कर रहा हूं।

+3

मेरा प्रारंभिक अनुमान यह है कि हास्केल से यह संभव नहीं है क्योंकि कोई 'setArgs' फ़ंक्शन नहीं है और' getArgs' एक अपरिवर्तनीय सूची देता है। – bheklilr

+0

धन्यवाद। मैं एफएफआई कोड पर डाल रहा हूं और उसी निष्कर्ष पर आया हूं, लेकिन चूंकि मैं इसके लिए अपेक्षाकृत नया हूं, मुझे नहीं पता था कि कोई दूसरा तरीका है या नहीं। – aaronlevin

+1

यह ऐसा कुछ है जिसे मुझे 5 मिनट पहले भी संभव नहीं था, इसलिए एक तरीका हो सकता है, लेकिन अगर कोई तरीका है तो इसमें एक आंतरिक पुस्तकालय में कुछ अजीब कोने फ़ंक्शन शामिल होगा। जीएचसी विशिष्ट पुस्तकालयों में देखें, क्योंकि यह संभवतः उस कंपाइलर पर निर्भर करेगा जिस पर आप उपयोग कर रहे हैं। – bheklilr

उत्तर

0

मैं (link) पैकेज unix पैकेज से देखता हूं।

इसमें पर्यावरण को संशोधित करने के लिए कार्य शामिल हैं और भले ही यह केवल getArgs प्रदान करता है, इसे setArgs फ़ंक्शन जोड़ने में मुश्किल नहीं होनी चाहिए।

+0

यह रणनीति काम नहीं कर रही है। इस कोड को यहां आज़माएं [यहां] (https://gist.github.com/bheklilr/ec78cc20e78479029812), जो 'System.Posix.Env.ByteString' में' getArgs' विधि के समान है। शायद यह कुछ आलसी मूल्यांकन से संबंधित है? निश्चित नहीं। – aaronlevin

+0

हमम ... भले ही आप अंत में 'getArgs >> = print' जोड़ते हैं, मूल तर्क मुद्रित होते हैं। आश्चर्य है कि यह क्यों हो रहा है। – ErikR