#define _GNU_SOURCE | |
#include <sys/types.h> | |
#include <unistd.h> | |
#include <stdlib.h> | |
#include <stdio.h> | |
#include <fcntl.h> | |
#include <errno.h> | |
#define BLOCK_SIZE 4096 | |
#define STEP (BLOCK_SIZE * 16) | |
#define SIZE (4ULL * 1024 * 1024 * 1024) | |
int main(int argc) | |
{ | |
int fd, step, ret = 0; | |
unsigned long i; | |
void *buf; | |
if (posix_memalign(&buf, BLOCK_SIZE, SIZE)) { | |
perror("alloc"); | |
exit(1); | |
} | |
fd = open("file2.img", O_RDWR|O_CREAT|O_DIRECT); | |
if (fd < 0) { | |
perror("open"); | |
exit(1); | |
} | |
if (ftruncate(fd, SIZE)) { | |
perror("ftruncate"); | |
exit(1); | |
} | |
ret = fallocate(fd, 0, 0, SIZE); | |
if (ret) { | |
perror("fallocate"); | |
exit(1); | |
} | |
for (step = STEP - BLOCK_SIZE; step >= 0; step -= BLOCK_SIZE) { | |
printf("step=%u\n", step); | |
for (i = step; i < SIZE; i += STEP) { | |
errno = 0; | |
if (pwrite(fd, buf, BLOCK_SIZE, i) != BLOCK_SIZE) { | |
perror("pwrite"); | |
exit(1); | |
} | |
} | |
if (fsync(fd)) { | |
perror("fsync"); | |
exit(1); | |
} | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment