如何在c中使用mmap

时间:2016-10-13 22:35:30

标签: c mmap

我已经搜索过,而且我似乎找不到如何使用mmap的方法。这就是我的......

char *pchFile;
if ((pchFile = (char *) mmap (NULL, fileSize, PROT_READ, MAP_SHARED, fd, 0)) == (char *) -1){
    fprintf(stderr, "Mmap Err: \n");
    exit (1);
}

那么,我怎么从获取pchFile,从文件中读取?是pchFile,从mmap映射的字节数组?如何读取400字节的偏移量?我可以有一个偏移量并且只读取一定量,例如只读取100个字节吗?

1 个答案:

答案 0 :(得分:1)

pchFile只是一个普通的char *(可以访问fileSize个有效字节)。因此,如果您想要一个指向偏移量为400字节的数据的指针,则可以使用&pchFile[400]pchFile + 400进行隐式或显式指针算法。

如何将其限制为100个字节取决于您使用的API; C本身没有指针“长度”的概念(有NUL终止字符串的API,但原始文件数据不太可能在有用的地方有NUL)。对于memcpy / memcmp和朋友,您将&pchFile[400]作为来源传递,并将大小调整为100。要初始化C ++ vector,您需要将开始和结束指针传递给构造函数,例如std::vector<char> myvec(&pchFile[400], &pchFile[500]);等。通常,它既可以是开始指针,也可以是长度,或者是开始和结束指针。