> Выдает ошибку EINVAL (Invalid argument). Ya zaglianul v `man mlock` pod Linux:
///////////////////////////////////////////////////////
........................
#include <sys/mman.h>
int mlock(const void *addr, size_t len);
........................
ERRORS
........................
EINVAL (Not on Linux) addr was not a multiple of the page size.
Linux adds
EINVAL len was negative.
........................
///////////////////////////////////////////////////////
O4en interesno, 4to vivedit sleduu4aya programma na Solarke i na Linuxe (kstati interesno `uname -a` na Solarke i na Linuxe):
///////////////////////////////////////////////////////
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mman.h>
int main(void) {
char *p;
int s;
int ret_code;
long s_conf;
s = getpagesize();
s_conf = sysconf(_SC_PAGESIZE);
printf("s='%d' s_conf='%ld'='%d'\n",s,s_conf,s_conf);
p = (char *)malloc(s);
if(p == NULL) {fprintf(stderr,"Malloc error: %s\n",strerror(errno)); return -1;}
ret_code = mlock((void *)p,s);
fprintf(stderr,"Error code = '%d' Result:%s\n",ret_code,strerror(errno));
return 0;
}
/////////////////////////////////////////////
> Маны читал. Куда кпать больше не знаю. Prorvemsia...
mailto: walkid@yandex.ru
S uvazeniem,
Walk
Решилось.
Надо было выровнять алоцированную память по границе страницы (чего в линуксе не требуется, видимо лочились все страницы, на каторые попадала алоцированная память).
> Решилось. > Надо было выровнять алоцированную память по границе > страницы (чего в линуксе не требуется, видимо лочились все > страницы, на каторые попадала алоцированная память).
?
Ya bi skazal, 4to viravnivane vklu4eno v sistemnii vizov...
Smotrite Linux kernel-2.6.5 "./mm/mlock.c":
asmlinkage long sys_mlock(unsigned long start, size_t len)
{
unsigned long locked;
unsigned long lock_limit;
int error = -ENOMEM;
> Выдает ошибку EINVAL (Invalid argument). Ya zaglianul v `man mlock` pod Linux:
///////////////////////////////////////////////////////
........................
#include <sys/mman.h>
int mlock(const void *addr, size_t len);
........................
ERRORS
........................
EINVAL (Not on Linux) addr was not a multiple of the page size.
Linux adds
EINVAL len was negative.
........................
///////////////////////////////////////////////////////
O4en interesno, 4to vivedit sleduu4aya programma na Solarke i na Linuxe (kstati interesno `uname -a` na Solarke i na Linuxe):
///////////////////////////////////////////////////////
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/mman.h>
int main(void) {
char *p;
int s;
int ret_code;
long s_conf;
s = getpagesize();
s_conf = sysconf(_SC_PAGESIZE);
printf("s='%d' s_conf='%ld'='%d'\n",s,s_conf,s_conf);
p = (char *)malloc(s);
if(p == NULL) {fprintf(stderr,"Malloc error: %s\n",strerror(errno)); return -1;}
ret_code = mlock((void *)p,s);
fprintf(stderr,"Error code = '%d' Result:%s\n",ret_code,strerror(errno));
return 0;
}
/////////////////////////////////////////////
> Маны читал. Куда кпать больше не знаю. Prorvemsia...
mailto: walkid@yandex.ru
S uvazeniem,
Walk