root/user/logstress.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. main

   1 #include "kernel/types.h"
   2 #include "kernel/stat.h"
   3 #include "kernel/fcntl.h"
   4 #include "user/user.h"
   5 
   6 // Stress xv6 logging system by having several processes writing
   7 // concurrently to their own file (e.g., logstress f1 f2 f3 f4)
   8 
   9 #define BUFSZ 500
  10 
  11 char buf[BUFSZ];
  12 
  13 int
  14 main(int argc, char **argv)
  15 {
  16   int fd, n;
  17   enum { N = 250, SZ=2000 };
  18   
  19   for (int i = 1; i < argc; i++){
  20     int pid1 = fork();
  21     if(pid1 < 0){
  22       printf("%s: fork failed\n", argv[0]);
  23       exit(1);
  24     }
  25     if(pid1 == 0) {
  26       fd = open(argv[i], O_CREATE | O_RDWR);
  27       if(fd < 0){
  28         printf("%s: create %s failed\n", argv[0], argv[i]);
  29         exit(1);
  30       }
  31       memset(buf, '0'+i, SZ);
  32       for(i = 0; i < N; i++){
  33         if((n = write(fd, buf, SZ)) != SZ){
  34           printf("write failed %d\n", n);
  35           exit(1);
  36         }
  37       }
  38       exit(0);
  39     }
  40   }
  41   int xstatus;
  42   for(int i = 1; i < argc; i++){
  43     wait(&xstatus);
  44     if(xstatus != 0)
  45       exit(xstatus);
  46   }
  47   return 0;
  48 }

/* [<][>][^][v][top][bottom][index][help] */