【LTP-open_posix_testsuite用例分析】mmap/1-1

简介

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值