📄 mapcmp.c
字号:
/* * Simple program to compare two mmap'd areas. * * Copyright (C) 2001 Alessandro Rubini and Jonathan Corbet * Copyright (C) 2001 O'Reilly & Associates * * The source code in this file can be freely used, adapted, * and redistributed in source or binary form, so long as an * acknowledgment appears in derived source files. The citation * should list that the code comes from the book "Linux Device * Drivers" by Alessandro Rubini and Jonathan Corbet, published * by O'Reilly & Associates. No warranty is attached; * we cannot take responsibility for errors or fitness for use. */#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/mman.h>#include <sys/errno.h>#include <fcntl.h>static char *mapdev (const char *, int, int);/* * memcmp dev1 dev2 offset pages */int main (int argc, char **argv){ unsigned int offset, size, i; char *addr1, *addr2;/* * Sanity check. */ if (argc != 5) { fprintf (stderr, "Usage: mapcmp dev1 dev2 offset pages\n"); exit (1); }/* * Map the two devices. */ offset = atoi (argv[3]); size = atoi (argv[4]); addr1 = mapdev (argv[1], offset, size); addr2 = mapdev (argv[2], offset, size);/* * Do the comparison. */ printf ("Comparing..."); fflush (stdout); for (i = 0; i < size; i++) if (*addr1++ != *addr2++) { printf ("areas differ at byte %d\n", i); exit (0); } printf ("areas are identical.\n"); exit (0);}static char *mapdev (const char *dev, int offset, int size){ char *addr; int fd = open (dev, O_RDONLY); if (fd < 0) { perror (dev); exit (1); } addr = mmap (0, size, PROT_READ, MAP_PRIVATE, fd, offset); if (addr == MAP_FAILED) { perror (dev); exit (1); } printf ("Mapped %s (%d @ %d) at 0x%p\n", dev, size, offset, addr); return (addr);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -