के साथ MAP_HUGETLB का उपयोग करने में त्रुटि यह कोड है जिसका उपयोग मैं हुबपेज में ubuntu में फ़ाइल को mmaping के लिए कर रहा हूं, लेकिन यह कॉल त्रुटि "अवैध तर्क" में विफल रही है। हालांकि, जब मैं एमएपी_एएनओएन ध्वज पास करता हूं जिसमें एमएमएपी में कोई फ़ाइल डिस्क्रिप्टर पैरामीटर नहीं होता है, तो यह काम करता है। मैं इसके पीछे संभावित कारण समझने में सक्षम नहीं हूं।उबंटू 10.04, MAP_SHARED
दूसरा, मैं समझ नहीं पा रहा हूं कि एमएपी_PRIVATE के साथ फ़ाइल mmaping क्यों अनुमति है जब यह ध्वज स्वयं का अर्थ है कि फ़ाइल में कोई बदलाव नहीं लिखा जाएगा। यह हमेशा MAP_ANON का उपयोग करके पूरा किया जा सकता है, या क्या मुझे कुछ याद आ रही है?
क्या कोई इनके साथ मेरी सहायता कर सकता है?
int32_t main(int32_t argc, char** argv) {
int32_t map_length = 16*1024*1024; // 16 MB , huge page size is 2 MB
int32_t protection = PROT_READ | PROT_WRITE;
int32_t flags = MAP_SHARED | MAP_HUGETLB;
int32_t file__ = open("test",O_RDWR|O_CREAT | O_LARGEFILE,s_IRWXU | S_IRGRP | S_IROTH);
if(file__ < 0) {
std::cerr << "Unable to open file\n";
return -1;
}
if (ftruncate(file__, map_length) < 0) {
std::cerr
<< "main :: unable to truncate the file\n"
<< "main :: " << strerror(errno) << "\n"
<< "main :: error number is " << errno << "\n";
return -1;
}
void *addr= mmap(NULL, map_length, protection, flags, file__, 0);
if (addr == MAP_FAILED) {
perror("mmap");
return -1;
}
const char* msg = "Hello World\n";
int32_t len = strlen(msg);
memcpy(addr,msg,len);
munmap(addr, map_length);
close(file__);
return 0;
}
'int32_t main' एक त्रुटि है। सी ++ मानक के अनुसार, 'मुख्य' का वापसी प्रकार और 'argc' के प्रकार दोनों को केवल' int 'होना चाहिए। –
लार्समैन, क्या यह प्रोग्राम के आउटपुट को प्रभावित करता है? मेरे आर्किटेक्चर int पर int32_t जैसा ही है, इसलिए इससे कोई फर्क नहीं पड़ता। लेकिन मानक दृष्टिकोण से यह सही नहीं है, मैं सहमत हूं। (इससे पहले मैंने इस टिप्पणी को लिखने में कुछ गलती की थी) – Faraz
फराज़: नहीं, वह सिर्फ नाइटपिक कर रहा था। – BjoernD