bench_pipe.c
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* ==== bench_pipe.c ============================================================
  2.  * Copyright (c) 1993 by Chris Provenzano, proven@athena.mit.edu
  3.  *
  4.  * Description : Benchmark reads of /dev/null. Gives a good aprox. of
  5.  *  syscall times.
  6.  *
  7.  *  1.00 93/08/01 proven
  8.  *      -Started coding this file.
  9.  */
  10. #include <sys/types.h>
  11. #include <sys/time.h>
  12. #include <stdio.h>
  13. #include <fcntl.h>
  14. #include <errno.h>
  15. #define OK 0
  16. #define NOTOK -1
  17. /* ==========================================================================
  18.  * usage();
  19.  */
  20. void usage(void)
  21. {
  22. printf("bench_pipe [-d?] [-c count]n");
  23.     errno = 0;
  24. }
  25. main(int argc, char **argv)
  26. {
  27. struct timeval starttime, endtime;
  28. char buf[1];
  29. int count = 1000;
  30. int debug = 0;
  31. int fd0[2];
  32. int fd1[2];
  33. int i;
  34. char word[256];
  35.     /* Getopt variables. */
  36.     extern int optind, opterr;
  37.     extern char *optarg;
  38. while ((word[0] = getopt(argc, argv, "c:d?")) != (char)EOF) {
  39. switch (word[0]) {
  40. case 'd':
  41. debug++;
  42. break;
  43. case 'c':
  44. count = atoi(optarg);
  45. break;
  46. case '?':
  47. usage();
  48. return(OK);
  49. default:
  50. usage();
  51. return(NOTOK);
  52. }
  53. }
  54. if ((pipe(fd0) < OK) || (pipe(fd1) < OK)) {
  55. printf("Error: pipen");
  56. exit(0);
  57. }
  58. switch (fork()) {
  59. case NOTOK:
  60. printf("Error: forkn");
  61. exit(0);
  62. case OK: /* Child */
  63. for (i = 0; i < count; i++) {
  64. if (read(fd1[0], buf, 1) < OK) {
  65. printf("Error: child readn");
  66. exit(0);
  67. }
  68. if (write(fd0[1], buf, 1) < OK) {
  69. printf("Error: child writen");
  70. exit(0);
  71. }
  72. }
  73. exit(0);
  74. break;
  75. default:
  76. break;
  77. }
  78. if (gettimeofday(&starttime, NULL)) {
  79. printf("Error: gettimeofdayn");
  80. exit(0);
  81. }
  82. count --;
  83. if (write(fd1[1], buf, 1) < OK) {
  84. perror("first parent write");
  85. exit(0);
  86. }
  87. for (i = 0; i < count; i++) {
  88. if (read(fd0[0], buf, 1) < OK) {
  89. printf("Error: parent readn");
  90. exit(0);
  91. }
  92. if (write(fd1[1], buf, 1) < OK) {
  93. printf("Error: parent writen");
  94. exit(0);
  95. }
  96. }
  97. if (gettimeofday(&endtime, NULL)) {
  98. printf("Error: gettimeofdayn");
  99. exit(0);
  100. }
  101. printf("%d ping pong tests took %d usecs.n", count, 
  102. (endtime.tv_sec - starttime.tv_sec) * 1000000 +
  103. (endtime.tv_usec - starttime.tv_usec));
  104. }