简介
mmap用于在文件内存间建立一种映射。
该用例主要用户检查映射的正确性
用例思路分析
创建一个临时文件,向里面写入内容x
然后映射该文件到内存
检查内存里是否是刚才写入文件的内容
源码分析
*
* Test Steps:
* 1. Create a tmp file;
* 2. mmap it to memory using mmap();
*
*/
这里说明了测试步骤
1、创建一个临时文件
2、调用mmap将它映射到内存
int main(void)
{
char tmpfname[PATH_MAX];
ssize_t len = 1024;
char data[len];
void *pa;
int fd;
// 这一步要再分析一下
PTS_GET_TMP_FILENAME(tmpfname, "pts_mmap_1_1");
// 删除该临时文件(如果有残留的话)
unlink(tmpfname);
// 打开临时文件
fd = open(tmpfname, O_CREAT | O_RDWR | O_EXCL, S_IRUSR | S_IWUSR);
// 打开失败报错退出
if (fd == -1) {
printf("Error at open(): %s\n", strerror(errno));
return PTS_UNRESOLVED;
}
// 确保临时文件关闭后能够删除
unlink(tmpfname);
// 创建一段指定内容、长度的内存,准备写入文件
memset(data, 'a', len);
// 写入文件
if (write(fd, data, len) != len) {
printf("Error at write(): %s\n", strerror(errno));
return PTS_UNRESOLVED;
}
// 将文件读写方式映射到pa ~ pa + len
pa = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
// 映射失败报错退出
if (pa == MAP_FAILED) {
printf("Error at mmap: %s\n", strerror(errno));
return PTS_FAIL;
}
// 检查映射后内存里是不是刚才写的文件内容
if (*(char *)pa != 'a') {
printf("Test FAILED: The file was not mapped correctly.\n");
return PTS_FAIL;
}
// 清理,关闭文件,解映射
close(fd);
munmap(pa, len);
printf("Test PASSED\n");
return PTS_PASS;
}