#include #include #include #include #include #include #include #include #include static void usage(void) { fprintf(stderr, "usage: %s dev offset size\n", getprogname()); exit(EXIT_FAILURE); } int main(int argc, char *argv[]) { char *path, *buf; off_t offset; size_t size; ssize_t done; int fd; if (argc != 4) usage(); path = argv[1]; errno = 0; offset = (off_t)strtoumax(argv[2], NULL, 0); if (errno != 0) err(EXIT_FAILURE, "Invalid offset"); errno = 0; size = strtoul(argv[3], NULL, 0); if (errno != 0) err(EXIT_FAILURE, "Invalid size"); buf = malloc(size); if (buf == NULL) errx(EXIT_FAILURE, "Cannot allocate memory."); fd = open(path, O_WRONLY); if (fd == -1) err(EXIT_FAILURE, "Cannot open %s", path); done = pwrite(fd, buf, size, offset); if (done == -1) err(EXIT_FAILURE, "Cannot write"); printf("write(%jd, %zu) = %zd\n", (intmax_t)offset, size, done); exit(EXIT_SUCCESS); }