यदि मेरे पास एक बफर है जिसमें फ़ाइल का डेटा है, तो मैं इससे फ़ाइल डिस्क्रिप्टर कैसे प्राप्त कर सकता हूं? यह how to untar file in memoryमेमोरी में बफर के फाइल डिस्क्रिप्टर को कैसे प्राप्त करें?
उत्तर
मैं एक साधारण उदाहरण लिखा था कि कैसे एक स्मृति क्षेत्र को filedescriptor बनाने के लिए:
#include <unistd.h>
#include <stdio.h>
#include <string.h>
char buff[]="qwer\nasdf\n";
int main(){
int p[2]; pipe(p);
if(!fork()){
for(int buffsize=strlen(buff), len=0; buffsize>len;)
len+=write(p[1], buff+len, buffsize-len);
return 0;
}
close(p[1]);
FILE *f = fdopen(p[0], "r");
char buff[100];
while(fgets(buff,100,f)){
printf("from child: '%s'\n", buff);
}
puts("");
}
से प्राप्त एक प्रश्न है। सी ++ के विपरीत, फ़ाइल I/O का सी मॉडल एक्सटेंशन के लिए खुला नहीं है।
fmemopen बफर से फ़ाइल * लौट सकते हैं, लेकिन fileno (fmemopen (...)) लौट -1। मुझे एक और विचार मिला: file_pipes [1] पर पाइप और फीड बफर सामग्री को लिखने()] द्वारा लिखें, और हम file_pipes [0] को उस बफर के फ़ाइल डिस्क्रिप्टर के रूप में देख सकते हैं। लेकिन जब मैं इसका अभ्यास करता हूं, तो लिखना() फ़ंक्शन बस अवरुद्ध होता है। क्या पाइप का कर्नेल बफर पर्याप्त नहीं है? धन्यवाद – solotim
यह पॉज़िक्स, आईआईआरसी है। सी नहीं, इस तरह आपने अपना प्रश्न टैग किया है। अर्थात। यह विंडोज पर काम नहीं करेगा। – MSalters
- 1. पायथन क्लोज़ फाइल डिस्क्रिप्टर प्रश्न
- 2. फाइल डिस्क्रिप्टर कैसे काम करते हैं?
- 3. मेमोरी बफर
- 4. मेमोरी बफर
- 5. ओपन फाइल के फ़ाइल डिस्क्रिप्टर तक कैसे पहुंचे
- 6. मेमोरी फाइल सिस्टम में सरल
- 7. मेमोरी FUSE फाइल सिस्टम
- 8. डिस्क फाइल सिस्टम के बारे में जानकारी कैसे प्राप्त करें?
- 9. libjpeg के साथ फ़ाइल के बजाय मेमोरी बफर को लिखें?
- 10. विम में विंडो में बफर को कैसे ठीक करें?
- 11. मेमोरी बफर से HBITMAP बनाना
- 12. Emacs में बफर पर फ़ोकस-अनुसरण-माउस कैसे प्राप्त करें?
- 13. आर में, फ़ाइल के बजाए मेमोरी बफर में कैसे प्लॉट करें?
- 14. ऑडियो रिकॉर्ड - बफर में डेटा कैसे प्राप्त करें?
- 15. मेमोरी में जावा रीडिंग फाइल और मेमोरी को कैसे उड़ाया जाए
- 16. सी ++ माइक्रोसॉफ्ट एसएपीआई: विंडोज़ टेक्स्ट-टू-स्पीच आउटपुट को मेमोरी बफर में कैसे सेट करें?
- 17. सॉकेट डिस्क्रिप्टर बनाम फ़ाइल डिस्क्रिप्टर
- 18. सी # में बड़ी फाइल को टुकड़ों में कैसे विभाजित करें?
- 19. एंड्रॉइड में मेमोरी उपयोग प्राप्त करें
- 20. सी # में मेमोरी लेनदेन के दायरे को कैसे कार्यान्वित करें?
- 21. node.js में बाल प्रक्रिया मेमोरी उपयोग कैसे प्राप्त करें?
- 22. यूआरएल से फाइल सामग्री प्राप्त करें?
- 23. जावा में मुफ्त मेमोरी (बफर और कैश समेत) की निगरानी कैसे करें?
- 24. मेमोरी बफर (स्ट्रिंगियो) में या ओपनसीवी पायथन लाइब्रेरी के साथ यूआरएल से छवि को कैसे पढ़ा जाए
- 25. Emacs संकलन बफर से त्वरित स्थिति कैसे प्राप्त करें?
- 26. ImageMagick छवि से सी बफर कैसे प्राप्त करें
- 27. सी में एक फाइल खोलना क्या है?
- 28. पाइथन में फ़ाइल डिस्क्रिप्टर को मूल न्यूलाइन वर्ण कैसे लिखें?
- 29. फ़ंक्शन के लिए चार बफर पास करने और बफर के आकार को प्राप्त करने के लिए
- 30. (लेखन कर्नेल) मैं इंटरप्ट डिस्क्रिप्टर तालिका को कैसे संशोधित करूं?
अच्छा। मामूली वृद्धि के रूप में, आप ['fcntl (fd, F_SETPIPE_SZ, ...)'] का उपयोग कर सकते हैं (http://www.kernel.org/doc/man-pages/online/pages/man2/fcntl.2.html) पाइप बफर आकार बढ़ाने के लिए। इसके लिए [msandiford] क्रेडिट (http://stackoverflow.com/a/14129599/781723) इसके लिए। –
लिनक्स पर, ['vmsplice()'] (http://man7.org/linux/man-pages/man2/vmsplice.2.html) उपयोगी हो सकता है: यह डेटा लिखने के लिए फॉर-लूप की आवश्यकता से बचाता है पाइप के लिए। –
यह एक बहुत ही बढ़िया समाधान है, लेकिन यदि आपको एफडी (यानी तलाश) से पढ़ने से अधिक करने में सक्षम होना चाहिए, तो यह काम नहीं करेगा। आप एक पाइप (कम से कम प्लेटफ़ॉर्म पर उपयोग नहीं करते) पर नहीं खोज सकते हैं। –