mapcmp.c
上传用户:wudi5211
上传日期:2010-01-21
资源大小:607k
文件大小:1k
源码类别:

嵌入式Linux

开发平台:

C/C++

  1. /*
  2.  * Simple program to compare two mmap'd areas.
  3.  */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <unistd.h>
  7. #include <sys/mman.h>
  8. #include <sys/errno.h>
  9. #include <fcntl.h>
  10. static char *mapdev (const char *, int, int);
  11. /*
  12.  * memcmp dev1 dev2 offset pages
  13.  */
  14. int main (int argc, char **argv)
  15. {
  16. unsigned int offset, size, i;
  17. char *addr1, *addr2;
  18. /*
  19.  * Sanity check.
  20.  */
  21. if (argc != 5)
  22. {
  23. fprintf (stderr, "Usage: mapcmp dev1 dev2 offset pagesn");
  24. exit (1);
  25. }
  26. /*
  27.  * Map the two devices.
  28.  */
  29. offset = atoi (argv[3]);
  30. size = atoi (argv[4]);
  31. addr1 = mapdev (argv[1], offset, size);
  32. addr2 = mapdev (argv[2], offset, size);
  33. /*
  34.  * Do the comparison.
  35.  */
  36. printf ("Comparing...");
  37. fflush (stdout);
  38. for (i = 0; i < size; i++)
  39. if (*addr1++ != *addr2++)
  40. {
  41. printf ("areas differ at byte %dn", i);
  42. exit (0);
  43. }
  44. printf ("areas are identical.n");
  45. exit (0);
  46. }
  47. static char *mapdev (const char *dev, int offset, int size)
  48. {
  49. char *addr;
  50. int fd = open (dev, O_RDONLY);
  51. if (fd < 0)
  52. {
  53. perror (dev);
  54. exit (1);
  55. }
  56. addr = mmap (0, size, PROT_READ, MAP_PRIVATE, fd, offset);
  57. if (addr == MAP_FAILED)
  58. {
  59. perror (dev);
  60. exit (1);
  61. }
  62. printf ("Mapped %s (%d @ %d) at 0x%pn", dev, size, offset, addr);
  63. return (addr);
  64. }