clearxs.c
上传用户:lampled
上传日期:2007-01-07
资源大小:94k
文件大小:2k
源码类别:

Web服务器

开发平台:

Unix_Linux

  1. /* Copyright (C) 1995, 1996 by Sven Berkvens (sven@stack.nl) */
  2. #include "config.h"
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <unistd.h>
  6. #include <sys/stat.h>
  7. #include <errno.h>
  8. #include <fcntl.h>
  9. #include <signal.h>
  10. #ifdef HAVE_ERR_H
  11. #include <err.h>
  12. #else /* Not HAVE_ERR_H */
  13. #include "err.h"
  14. #endif /* HAVE_ERR_H */
  15. #include <pwd.h>
  16. #include "xscounter.h"
  17. #include "getopt.h"
  18. #include "string.h"
  19. #define MODE_TODAY 0
  20. #define MODE_MONTH 1
  21. #define MODE_TOTAL 2
  22. #define MODE_NONE 3
  23. extern int
  24. main DECL2(int, argc, char **, argv)
  25. {
  26. int option, x, fd, mode = MODE_NONE;
  27. countstr counter;
  28. char counterfile[XS_PATH_MAX];
  29. while ((option = getopt(argc, argv, "dmT")) != EOF)
  30. {
  31. switch(option)
  32. {
  33. case 'd':
  34. mode = MODE_TODAY;
  35. break;
  36. case 'm':
  37. mode = MODE_MONTH;
  38. break;
  39. case 'T':
  40. mode = MODE_TOTAL;
  41. break;
  42. default:
  43. errx(1, "Usage: %s -[d|m|T]", argv[0]);
  44. }
  45. }
  46. if (mode == MODE_NONE)
  47. errx(1, "No mode specified");
  48. if (argc != optind)
  49. errx(1, "Too many arguments");
  50. sprintf(counterfile, "%s/%s", HTTPD_ROOT, CNT_DATA);
  51. if ((fd = open(counterfile, O_RDWR, 0)) < 0)
  52. err(1, "Could not open(%s)", counterfile);
  53. x = 0;
  54. while (read(fd, &counter, sizeof(countstr)) == sizeof(countstr))
  55. {
  56. switch(mode)
  57. {
  58. case MODE_TOTAL:
  59. counter.total = 0;
  60. case MODE_MONTH:
  61. counter.month = 0;
  62. case MODE_TODAY:
  63. counter.today = 0;
  64. }
  65. if (lseek(fd, x * sizeof(countstr), SEEK_SET) == -1)
  66. err(1, "lseek()");
  67. if (write(fd, &counter, sizeof(countstr)) != sizeof(countstr))
  68. err(1, "write()");
  69. x++;
  70. }
  71. close(fd);
  72. return(0);
  73. }