如何在c中使用mmap
How to use mmap in c
我进行了搜索,但似乎找不到如何使用 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 个字节吗?
pchFile
只是一个普通的旧 char *
(可访问 fileSize
有效字节)。因此,如果您想要一个指向偏移量为 400 字节的数据的指针,您可以只使用 &pchFile[400]
或 pchFile + 400
进行隐式或显式指针运算。
如何将其限制为 100 个字节取决于您使用的 API; C 本身没有指针的 "length" 的概念(对于以 NUL 结尾的字符串有 API,但原始文件数据不太可能在有用的地方有 NUL)。对于 memcpy
/memcmp
和朋友,您将传递 &pchFile[400]
作为来源,并将大小传递为 100
。为了初始化 C++ vector
,您需要将开始和结束指针传递给构造函数,例如std::vector<char> myvec(&pchFile[400], &pchFile[500]);
,等等。通常,它要么是起始指针和长度,要么是起始指针和结束指针。
我进行了搜索,但似乎找不到如何使用 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 个字节吗?
pchFile
只是一个普通的旧 char *
(可访问 fileSize
有效字节)。因此,如果您想要一个指向偏移量为 400 字节的数据的指针,您可以只使用 &pchFile[400]
或 pchFile + 400
进行隐式或显式指针运算。
如何将其限制为 100 个字节取决于您使用的 API; C 本身没有指针的 "length" 的概念(对于以 NUL 结尾的字符串有 API,但原始文件数据不太可能在有用的地方有 NUL)。对于 memcpy
/memcmp
和朋友,您将传递 &pchFile[400]
作为来源,并将大小传递为 100
。为了初始化 C++ vector
,您需要将开始和结束指针传递给构造函数,例如std::vector<char> myvec(&pchFile[400], &pchFile[500]);
,等等。通常,它要么是起始指针和长度,要么是起始指针和结束指针。