मुझे ऐसा कुछ चाहिए जो फ़ाइल हैंडल जैसा दिखता हो लेकिन वास्तव में आई/ओ रीडायरेक्ट के लिए उपयोग करने के लिए इन-मेमोरी बफर द्वारा समर्थित है। मैं यह कैसे कर सकता हूँ?मैं हास्केल में इन-मेमोरी हैंडल कैसे बना सकता हूं?
उत्तर
संकलक को संशोधित किए बिना यह संभव नहीं है। ऐसा इसलिए है क्योंकि हैंडल एक सार डेटा प्रकार है, एक टाइपक्लास नहीं।
सभी उत्तरों के लिए धन्यवाद। मैं वास्तव में जानना चाहता था कि ऐसा करने के लिए एक बेवकूफ हास्केल तरीका था जिसे मैं नहीं जानता था, इसलिए यह जवाब मुझे मुकदमा देता है। – airportyh
यह संभव नहीं हो सकता है। GHC, कम से कम, एक ओएस फ़ाइल डिस्क्रिप्टर रखने के लिए एक हैंडल की आवश्यकता होती है जिसका उपयोग सभी पढ़ने/लिखने/तलाश कार्यों के लिए किया जाता है।
जीएचसी स्रोतों से /libraries/base/IOBase.lhs
देखें।
आप ओएस की सहायता को जोड़कर एक ही प्रभाव प्राप्त कर सकते हैं: एक अस्थायी फ़ाइल बनाएं, इसे हैंडल से कनेक्ट करें और फिर स्मृति I/O रीडायरेक्ट के लिए फ़ाइल को मैप करें। इस तरह, मेमोरी मैप किए गए अनुभाग में सभी हैंडल I/O दिखाई देंगे।
यदि आप सी या सिस्टम कॉल के संदर्भ में जो करना चाहते हैं उसे व्यक्त कर सकते हैं तो आप हास्केल के विदेशी फंक्शन इंटरफेस (एफएफआई) का उपयोग कर सकते हैं। मैंने mmap का उपयोग करने का सुझाव देना शुरू किया, लेकिन दूसरे विचार पर मुझे लगता है कि एमएमएपी गलत तरीके से मैपिंग कर सकता है भले ही आपने इसे अनाम विकल्प के साथ इस्तेमाल किया हो।
आप हैस्केल एफएफआई के बारे में हैस्केल.org विकी पर अधिक जानकारी प्राप्त कर सकते हैं।
यह वास्तव में लाइब्रेरी डिज़ाइन में एक बग है, और जो मुझे परेशान करता है। मैं जो चाहता हूं उसे करने के लिए दो दृष्टिकोण देखता हूं, जिनमें से कोई भी बहुत आकर्षक नहीं है।
एक नया typeclass बनाएँ, वर्तमान संभाल यह का एक उदाहरण बनाने के लिए, इन-स्मृति-डेटा बात करने के लिए एक और उदाहरण लिखते हैं, और अपने कार्यक्रम इस सुविधा का उपयोग करने की आवश्यकता है, उन सभी बदल जाते हैं। संभवतः यह
System.IO
के बजायSystem.SIO
(या जो भी आप इसे कॉल करना चाहते हैं) आयात करने के समान सरल है। लेकिन यदि आपData.ByteString
जैसे पुस्तकालयों में कस्टम I/O रूटीन का उपयोग करते हैं, तो वहां और काम करने के लिए और अधिक काम है।आई/ओ पुस्तकालयों को इसका समर्थन करने के लिए उन्हें बढ़ाने के लिए पुनर्लेखन करें। तुच्छ नहीं, और बहुत सारे काम, लेकिन यह करना मुश्किल नहीं होगा। हालांकि, तब आपके पास उन सिस्टम के साथ संगतता समस्या है जिनके पास यह लाइब्रेरी नहीं है।
मैं सिर्फ एक पुस्तकालय जो इस प्रदान करता है, "घुंडी" [hackage] कहा जाता है लिखा था। आप Handle
रों बनाने के लिए इसका उपयोग कर सकते हैं जो संदर्भ/संशोधित ByteString
एक:
import Data.ByteString (pack)
import Data.Knob
import System.IO
main = do
knob <- newKnob (pack [])
h <- newFileHandle knob "test.txt" WriteMode
hPutStrLn h "Hello world!"
hClose h
bytes <- Data.Knob.getContents knob
putStrLn ("Wrote bytes: " ++ show bytes)
इस सवाल का एक आधुनिक जवाब जोड़ने के लिए, आप इस्तेमाल कर सकते हैं createPipe
System.Process
से:
createPipe :: IO (Handle, Handle)
https://www.stackage.org/haddock/lts-10.3/process-1.6.1.0/System-Process.html#v:createPipe
- 1. मैं हास्केल में हैंडल कैसे जोड़ सकता हूं?
- 2. मैं हास्केल में ऑपरेटर कैसे बना सकता हूं?
- 3. मैं रंगीन टेक्स्ट कैसे बना सकता हूं?
- 4. मैं पर्ल क्लास कैसे बना सकता हूं?
- 5. मैं वर्चुअल गेमपैड कैसे बना सकता हूं?
- 6. मैं थ्रेड पूल कैसे बना सकता हूं?
- 7. मैं स्ट्रिंग को कैसे बना सकता हूं?
- 8. मैं वर्टिकल यूआईस्लाइडर कैसे बना सकता हूं?
- 9. मैं मैन्युअल diff कैसे बना सकता हूं?
- 10. मैं ओसीआर कार्यक्रम कैसे बना सकता हूं?
- 11. मैं शेलटोस्ट कैसे बना सकता हूं?
- 12. मैं AllocateHwnd थ्रेडसेफ कैसे बना सकता हूं?
- 13. मैं जावा सैंडबॉक्स कैसे बना सकता हूं?
- 14. मैं विस्तारित टेक्स्टबॉक्स कैसे बना सकता हूं?
- 15. मैं एक constraintViolationException कैसे बना सकता हूं?
- 16. मैं सिंगलटन IENumerable कैसे बना सकता हूं?
- 17. मैं बाइनरी पैच कैसे बना सकता हूं?
- 18. मैं कॉन्फ़िगर स्क्रिप्ट कैसे बना सकता हूं?
- 19. जावास्क्रिप्ट: मैं JSONP कैसे बना सकता हूं?
- 20. मैं 404 पेज कैसे बना सकता हूं?
- 21. मैं लॉकलेस कतार कैसे बना सकता हूं?
- 22. मैं रिमोट फाइल कैसे बना सकता हूं?
- 23. मैं JSON ऐरे कैसे बना सकता हूं?
- 24. मैं डिमन थ्रेड कैसे बना सकता हूं?
- 25. mod_perl का उपयोग करके, मैं अपाचे हैंडल .pl (पर्ल) फ़ाइलों को कैसे बना सकता हूं?
- 26. मैं हास्केल में एक HTTPS अनुरोध कैसे कर सकता हूं?
- 27. मैं हास्केल में पॉइंटर्स का अनुकरण कैसे कर सकता हूं?
- 28. मैं केकेपीएचपी में सत्र डेटा कैसे बना सकता हूं, लिख सकता हूं और पढ़ सकता हूं?
- 29. मैं WPF में मार्की प्रगति पट्टी कैसे बना सकता हूं?
- 30. मैं विम में शिफ्ट + स्पेसबार पेज कैसे बना सकता हूं?
आप इस सवाल पर फिर से विचार करना चाह सकता है, एक नया जवाब है जिसे आपको देखना चाहिए। –
@ पीटर मोर्टेंसन ऐसा लगता है कि जॉन का जवाब बिल्कुल वही है जो आप चाहते हैं। – PyRulez