aboutsummaryrefslogtreecommitdiff
path: root/semestr-5/so/lista4/so21_lista_4/mkholes.c
blob: d719fd413d9355c8d70e67f91d863401c4da84be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "csapp.h"

#define BLKSZ 4096 /* block size */
#define NBLKS 8192 /* number of blocks written to a file */
#define WRAP 64

int main(void) {
  int fd = Open("holes.bin", O_CREAT | O_TRUNC | O_WRONLY, 0644);

  int usedblks = 0;

  for (int i = 0; i < NBLKS; i++) {
    if (i % WRAP == 0)
      dprintf(STDERR_FILENO, "%04d ", i);
    if (random() % 64) {
      Lseek(fd, BLKSZ, SEEK_CUR);
      Write(STDERR_FILENO, ".", 1);
    } else {
      char blk[BLKSZ];
      for (int j = 0; j < BLKSZ; j++)
        blk[j] = random();
      Write(fd, blk, BLKSZ);
      Write(STDERR_FILENO, "O", 1);
      usedblks++;
    }
    if (i % WRAP == WRAP - 1)
      Write(STDERR_FILENO, "\n", 1);
  }
  Close(fd);

  dprintf(STDERR_FILENO, "Non-zero blocks: %d\n", usedblks);

  return 0;
}