2011-04-23 15 views
10

getrlimit (RLIMIT_MEMLOCK) का उपयोग करके, कोई लॉक मेमोरी की अनुमति राशि प्राप्त कर सकता है एक प्रक्रिया आवंटित (mlock() या mlockall())।एक प्रक्रिया में कितनी मेमोरी लॉक हुई

लेकिन वर्तमान में लॉक की गई स्मृति राशि को कैसे पुनर्प्राप्त करें?

उदाहरण के लिए, getrusage() द्वारा कोई जानकारी नहीं लौटाई गई है।

लिनक्स के तहत, वीएमएलके से शुरू होने वाली लाइन से लॉक मेमोरी की मात्रा को निकालना/proc/self/status करना संभव है।

क्या लॉक की गई स्मृति की मात्रा को पुनर्प्राप्त करने का कोई पोर्टेबल तरीका है जो लिनक्स, * बीएसडी और अन्य पॉज़िक्स संगत सिस्टम पर काम करेगा?

+1

पॉज़िक्स निर्दिष्ट करता है कि कॉल लागू नहीं होने पर मेल और मेलॉकल के लिए कॉल ENOSYS के साथ विफल हो जाएंगे। इसका मतलब है कि लॉकिंग/अनलॉकिंग के लिए कोई गारंटीकृत पोर्टेबल इंटरफेस नहीं है, इस अर्थ में पोर्टेबल है कि इसे लागू करने की गारंटी है। इसके अलावा। प्रक्रिया मेमोरी के लॉक पेजों को गिनने के लिए कोई POSIX निर्दिष्ट तरीका नहीं है। –

उत्तर

3

आपको शायद प्रत्येक सिस्टम की जांच करने और उसके अनुसार इसे लागू करने की आवश्यकता होगी। लिनक्स पर:

cat /proc/$PID/status | grep VmLck

आप शायद के रूप में इस जानकारी (array.c में) समारोह task_mem में बनाई गई है, सी (VmLck के लिए खोज लाइन द्वारा /proc लाइन पढ़ सकते हैं और) में भी ऐसा ही करने की आवश्यकता होगी जो मैं डॉन ऐसा नहीं लगता कि आप सीधे पहुंच सकते हैं। कुछ ऐसा:

#include <unistd.h> 
#include <stdlib.h> 
#include <stdio.h> 

char cwd[PATH_MAX]; 
sprintf(cwd, "/proc/%d/status", getpid()); 

FILE* fp = fopen(cwd, "r"); 
if(!fp) { 
    exit(EXIT_FAILURE); 
} 

while((read = getline(&line, &len, fp)) != -1) { 
    // search for line starting by "VmLck" 
} 
+0

छोटा प्रारूप: फ़ाइल * एफपी = फॉपेन ("/ proc/self/status", "r"); – milton

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