/** * Copyright (C) 2012 NAKAMURA Minoru * * gcc -Wall -g -D _GNU_SOURCE hole-punch.c -o hole-punch */ #include #include #include #include #include #include #include #include #include int main(int argc, char **argv) { if (argc != 4) { fprintf(stderr, "Syntax: %s filename offset length\n", argv[0]); exit(EXIT_FAILURE); } int fd; if ((fd = open(argv[1], O_RDWR)) < 0) { fprintf(stderr, "Cannot open %s\n", argv[1]); exit(EXIT_FAILURE); } unsigned long offset, len; offset = atol(argv[2]); len = atol(argv[3]); if (fallocate(fd, FALLOC_FL_KEEP_SIZE|FALLOC_FL_PUNCH_HOLE, offset, len)) { int eno = errno; fprintf(stderr, "Failure: fallocate(fd, FALLOC_FL_PUNCH_HOLE, ) errno=%s(%d)\n", strerror(eno), eno); exit(EXIT_FAILURE); } close(fd); exit(EXIT_SUCCESS); return 0; }