2010-05-30 10 views
6

तो मेरे पास मेरे प्रोग्राम (रैम में) में कुछ अस्थायी डेटा है। मैं किसी भी तरह से ऐसा लगता हूं कि यह एक फ़ाइल है (उदाहरण के लिए इसे किसी अन्य प्रोग्राम में भेजने के लिए जो तर्क के रूप में फ़ाइल लिंक लेता है)?राम डेटा का इलाज कैसे करें जैसे कि यह वास्तविक फ़ाइल थी?

क्या यह संभव है?

ऐसी चीज कैसे करें?

+6

आप किस ओएस चल रहे हैं? –

+0

मैं विंडोज 7 ओएस – Rella

+2

का उपयोग करता हूं, केवल "वास्तविक" फ़ाइल में डेटा लिखने और उस फ़ाइल को तर्क के रूप में भेजने में क्या गलत है? –

उत्तर

1

आप इसे सी में popen() फ़ंक्शन का उपयोग कर सकते हैं:

FILE *f = popen("program args", "w"); 
// write your output to f here using stdio 
pclose(f); 

यह संभव है अपने बाहरी कार्यक्रम stdin से अपने इनपुट पढ़ता है।

+3

पॉपन सी के लिए नहीं देता, यह पॉज़िक्स है। –

+0

@ बिली ओनेल: यह सच है, लेकिन सी का कोई सामान्य उद्देश्य कार्यान्वयन ऐसे 'पॉपन()' फ़ंक्शन प्रदान करता है (हालांकि इसे एमएसवीसी में '_popen()' कहा जा सकता है)। –

+0

यह भी मानता है कि ओपी डेटा को धारण करने वाले बाहरी प्रोग्राम को निष्पादित/शुरू करने की इच्छा रखता है। फिर भी, यह समाधान चिकना है। –

0

आप पाइप इस्तेमाल कर सकते हैं()

 
The pipe() function shall create a pipe and place two file descriptors, 
one each into the arguments fildes[0] and fildes[1], that refer to the 
open file descriptions for the read and write ends of the pipe. Their 
integer values shall be the two lowest available at the time of the 
pipe() call. The O_NONBLOCK and FD_CLOEXEC flags shall be clear on both 
file descriptors. (The fcntl() function can be used to set both these 
flags.) 
+0

कोई विंडोज फ़ंक्शन नहीं (प्रश्न पर टिप्पणी देखें) – MSalters

+0

हाँ मुझे एहसास हुआ कि लेकिन प्रश्न को संपादित करने से पहले कोई ओएस निर्दिष्ट नहीं किया गया था – hhafez

+0

हालांकि मैं मानता हूं कि ऐसा करने का विंडोज़ तरीका अभी भी संभव है कि पॉज़िक्स फ़ंक्शंस जैसे विंडोज़ पर पाइप का उपयोग करना संभव हो (उदाहरण के लिए सिगविन का उपयोग करना) लेकिन मैं मानता हूं कि यह जवाब नहीं है जो मैं विंडोज़ – hhafez

0

हां, यह संभव है। आप interprocess communication तंत्र के माध्यम से अपने डेटा को अपने अन्य एप्लिकेशन में स्थानांतरित कर सकते हैं:

  1. आपके ओएस के आधार पर, आपके पास अलग-अलग विकल्प हैं। आप एक पाइप बना सकते हैं, क्योंकि अन्य पोस्टर ने यहां उल्लेख किया है, क्योंकि कई ओएस में पाइप हैं।
  2. आप साझा स्मृति का भी उपयोग कर सकते हैं।
  3. आप इसे आसानी से फ़ाइल में लिख सकते हैं, और उसके बाद उस फ़ाइल को अपने अन्य एप्लिकेशन में खोल सकते हैं।
  4. कई ओएस में अन्य तकनीकें हैं जिनका आप उपयोग कर सकते हैं।

संपादित करें: MSDN सभी आईपीसी विंडोज here के लिए उपलब्ध तंत्र सूचीबद्ध करता है।

+0

कौन सी प्रक्रियाएं इंटरक्यूनिकेटिंग कर रही हैं? जवाब समझ में नहीं आता है। – samoz

+0

@samoz - ओपी दो कार्यक्रमों का वर्णन करता है - उसका वह व्यक्ति जिसमें राम में डेटा है जिसे वह भेजना चाहता है, और दूसरा जो उस डेटा को प्राप्त करने की आवश्यकता है। कार्यक्रम == प्रक्रिया जब वे ओएस में चल रहे हैं। –

11

यदि आपके ऑपरेटिंग सिस्टम (यूनिक्सॉयड सिस्टम और विंडोज़ डू) द्वारा समर्थित है, तो आप memory-mapped files का उपयोग करने का प्रयास कर सकते हैं।

+0

+1। इस तरह डेटा को तब तक कॉपी नहीं किया जाता है जब तक ओएस यह तय न करे। – MSalters

15

डिस्क पर फ़ाइल क्यों न लिखें? यदि डिस्क पर लिखना बहुत धीमा है, तो डेटा को कैश में रखने के लिए FILE_ATTRIBUTE_TEMPORARY ध्वज CreateFile पर जा सकता है (और इसे भौतिक डिवाइस पर लिखने से बचें)।

कभी-कभी स्पष्ट समाधान सर्वोत्तम होते हैं ...

+1

ऐसा करने का यह सही तरीका है। यदि संभव हो तो +5। – samoz

+0

+1 लेकिन मुझे लगता है कि यह कैश और फ़ाइल कितनी बड़ी है, और उम्मीद है कि पहले दूसरे की तुलना में बड़ा है! – mdma

+1

@mdma: सच है, लेकिन यदि फ़ाइल को फिट करने के लिए कैश बहुत छोटा है, तो आप तर्क दे सकते हैं कि पूरी फ़ाइल को स्मृति में पहली जगह रखना संभव नहीं है। 'FILE_ATTRIBUTE_TEMPORARY' के बारे में अच्छी बात यह है कि यदि कैश में पर्याप्त स्थान नहीं है, तो यह अभी भी फ़ाइल सिस्टम का उपयोग करेगा ताकि आपको चिंता न करें। –

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

  • कोई संबंधित समस्या नहीं^_^