日期:2014-05-16  浏览次数:20694 次

求mremap用法
C/C++ code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <linux/mman.h>
int main(int argc, char **argv)
{
    void *s,*x;
    x=malloc(8);
    s=(void *)mremap(x,8,8,0);
    return 0;
}


为什么我的mremap函数总是返回-1呢?
看别人的示例代码和我的这个好像差不多。。。

------解决方案--------------------
C/C++ code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <linux/mman.h>
int main(int argc, char **argv)
{
    void *s,*x;
    x=malloc(8);
    s=(void *)mremap(x,8,8,0);
    perror("mremap");
    printf("old 0x%x new 0x%x\n",x,s);
    return 0;
}

------解决方案--------------------
C/C++ code

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <linux/mman.h>
int main(int argc, char **argv)
{
    void *s,*x;
    x=malloc(8192);
        
    x = (unsigned int )x + 0x1000;
    x = (unsigned int )x & 0xfffff000;
    s=(void *)mremap(x,4000,8,0);

    perror("mremap");
    printf("old 0x%x new 0x%x\n",x,s);
    return 0;
}