如果一个文件还没有内存映射,我必须对该文件进行内存映射。我提供的代码不起作用。我从另一个文件调用这个函数两次,每次都创建不同的mmapPtr。

char *mmapPtr;

void MemoryMapFile()
{

    int fd;
    struct stat sbuf;
    if(mmapPtr==NULL) <--- why is this executed when I called MemoryMapFile() second time
    {
        // get file descriptor of file
        if ((fd = open("example.c", O_RDONLY)) == -1)
        {
            perror("open");
            exit(1);
        }
        if (stat("example.c", &sbuf) == -1)
        {
            perror("stat");
            exit(1);
    }
        if ((data = mmap((caddr_t)0, sbuf.st_size, PROT_READ, MAP_SHARED, fd, 0)) ==  (caddr_t)(-1))
        {
            perror("mmap");
            exit(1);
        }
        printf("mmap pointer %p \n",mmapPtr);
    }

最佳答案

如果char*mmapPtr不是全局或静态指针,则行

if(mmapPtr==NULL)

从不返回true,因为未初始化的指针具有随机值,而不是空值。
如果你申报
char *mmapPtr = NULL;

它应该可以工作(忽略其他可能的错误)

07-24 09:51