1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
#include <sys/sysmacros.h>
#include <string.h>
#include <stdint.h>
#include "zdtmtst.h"
dev_t get_mapping_dev(void *addr)
{
char buf[1024];
FILE *f;
unsigned int major, minor;
int ret;
f = fopen("/proc/self/maps", "r");
if (f == NULL) {
pr_perror("Failed to open maps file");
return (dev_t)-1;
}
while (fgets(buf, sizeof(buf), f)) {
if ((unsigned long)addr == strtoul(buf, NULL, 16)) {
ret = sscanf(buf, "%*x-%*x %*c%*c%*c%*c %*x %x:%x", &major, &minor);
if (ret != 2) {
pr_err("Can't parse /proc/self/maps\n");
return (dev_t)-1;
}
return makedev(major, minor);
}
}
return (dev_t)-1;
}
|