系统调用时间测量

系统调用时间测量

我已经使用系统函数 write() 和 read()(如果使用 -s 命令)或 C 库函数(如果使用 -l 否则)实现了数据复制循环。我试图测量系统调用函数的时间,但它不起作用。由于系统调用是静态链接的,这是否正常?这是我的代码:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>

static const char progname[] = "scat";

static int lcat(){
   int c;
   while (1) {
      if ((c = getc(stdin)) != EOF){
         int n = putc(c, stdout);
         if (n == EOF){
            perror(progname);
            return -1;
         }
      }else{
         perror(progname);
         return -1;
      }
   }

   if (fflush(stdout) || ferror(stdout) || ferror(stdin)) {
      perror(progname);
      return -1;
   }

   return 0;
}

static int scat(){
   int c;
   ssize_t n;

   while (1){
      n = read(0, &c, 1);
      if (n < 0){
         perror(progname);
         return -1;
      }
      int m = write(STDOUT_FILENO, &c, 1);
      if (m == -1 || m != 1){
         perror(progname);
         return -1;
      }
   }

   return 0;
}

int main(int argc, char *argv[]){
   int c, status = EXIT_SUCCESS;
   int (*vcat)() = lcat;

   while ((c = getopt(argc, argv, "hls")) >= 0) {
      switch (c){
         case 'h':
            printf("Usage: %s [-h] [-l] [-s] files ... \n", progname);
            return EXIT_SUCCESS;
         case 's':
            vcat = scat;
            break;
         case 'l':
            vcat = lcat;
            break;
         default:
            return EXIT_FAILURE;
      }
   }

   if (optind == argc) {
      if (vcat(NULL) < 0) {
         status = EXIT_FAILURE;
      }
   }else{
      for (; optind < argc; optind++) {
         if (vcat(argv[optind]) < 0) {
            status = EXIT_FAILURE;
         }
      }
   }

   return status;
}

这是我正在使用的命令:

time ./scat -s < some-large-file > /dev/null

相关内容