diff options
Diffstat (limited to 'semestr-5/so/lista4/so21_lista_4/mkholes.c')
-rw-r--r-- | semestr-5/so/lista4/so21_lista_4/mkholes.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/semestr-5/so/lista4/so21_lista_4/mkholes.c b/semestr-5/so/lista4/so21_lista_4/mkholes.c new file mode 100644 index 0000000..d719fd4 --- /dev/null +++ b/semestr-5/so/lista4/so21_lista_4/mkholes.c @@ -0,0 +1,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; +} |