2013-08-21 5 views
10

आप फ़ाइल हैंडल इन-मेमोरी खोल सकते हैं?मेमोरी में फ़ाइलों को खोलने का मतलब क्या है?

इन-मेमोरी हिस्सा मेरे लिए अस्पष्ट है, इसका क्या अर्थ है?

यदि इसका मतलब है कि आप कंप्यूटर की स्मृति का उपयोग कर सकते हैं, तो क्या यह पहले से ही ऐसा नहीं कर रहा है?

+0

आपने यह कहां पढ़ा है? यह भ्रामक है, क्योंकि फ़ाइल हैंडल * हमेशा * एक मेमोरी संरचना है। यह संभवतः पर्ल स्केलर चर (जो स्मृति में हैं) पर फ़ाइल हैंडल खोलने का जिक्र है। – Borodin

+0

हां, आपकी टिप्पणी सही है, मेरा मतलब है कि – airnet

+1

'perldoc -f open' इन्हें" इन-मेमोरी फाइल "के रूप में संदर्भित करता है – mob

उत्तर

16

इसका मतलब है कि आप स्केलर चर से लिखने और पढ़ने के लिए फ़ाइल हैंडल का उपयोग कर सकते हैं।

my $var = ""; 
open my $fh, '>', \$var; 
print $fh "asdf"; 
close $fh; 
print $var;   # asdf 

अंत में, इस

$var .= "asdf" 

करने के लिए सिर्फ एक और तरीका है, लेकिन संदर्भों हैं जहां अधिक सुविधाजनक या अधिक स्ट्रिंग परिवर्तन मानदंड से filehandle मानदंड का उपयोग करने के लिए उपयुक्त है।

उदाहरण के लिए, इस कोड के साथ शुरू:

open my $fh, '>', $logfile; 
... 
print $fh $some_message_to_be_logged; 
... 500 more print $fh statements ... 
close $fh; 

लेकिन क्या आपको पता है? अब मैं अपने लॉग संदेशों एक अदिश चर में, रिकॉर्ड था शायद इसलिए मैं उन के माध्यम से खोज सकते हैं, उन्हें हेरफेर इससे पहले कि वे डिस्क के लिए लिखा जाता है आदि मैं

$logvar .= $some_message_to_be_logged 

लेकिन में करने के लिए अपने सभी print बयान को बदल सकता है इस मामले में open कथन को बदलने के लिए यह अधिक सुविधाजनक है।

open my $fh, '>', \$logvar 
0

आप सीधे फ़ाइल स्केलर चर के लिए फ़ाइल हैंडल खोल सकते हैं। यह विशेष रूप से उपयोगी होता है जब आपके पास ऐसा कुछ होता है जिसे फ़ाइल की तरह व्यवहार करना पड़ता है, लेकिन आप डिस्क पर एक नहीं चाहते हैं। इस उदाहरण perldoc से लिया जाता है:

close STDOUT; 
open(STDOUT, ">", \$variable) 
or die "Can't open STDOUT: $!"; 

यह STDOUT बंद कर देता है और फिर इसे $variable से जुड़ी खोल देता है।

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