aboutsummaryrefslogtreecommitdiff
path: root/semestr-5/so/lista4/so21_lista_4/mkholes.c
diff options
context:
space:
mode:
Diffstat (limited to 'semestr-5/so/lista4/so21_lista_4/mkholes.c')
-rw-r--r--semestr-5/so/lista4/so21_lista_4/mkholes.c34
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;
+}