int main (int argc, char *argv[]) { int ret = -1; int fd = -1; char *buf = "This is a string"; char *filename = NULL; unsigned long long size = 0; if (argc < 2) { fprintf (stderr, "Usage:./a.out <filename>\n"); return 2; } filename = argv[1]; fd = open (filename, O_CREAT|O_RDWR, 0644); if (fd == -1) { fprintf (stderr, "OPEN: cannot open the file fff. (%s)", strerror (errno)); return 2; } if (argc < 3) size = 5 * UNIT_GB; else string2bytesize (argv[2], &size); ret = ftruncate (fd, size); if (ret == -1) { fprintf (stderr, "TRUNCATE: cannot truncate the file %s. (%s)", filename, strerror (errno)); goto out; } printf ("File got truncated tp %llu bytes. Sleeping for 22 seconds. " "Kill the brick.....\n", size); sleep (22); ret = lseek (fd, 1048576, SEEK_SET); if (ret == -1) { fprintf (stderr, "LSEEK: cannot seek to the offset file fff. " "(%s)", strerror (errno)); goto out; } ret = write (fd, buf, strlen (buf)); if (ret == -1) { fprintf (stderr, "WRITE: cannot write to the file fff. (%s)", strerror (errno)); goto out; } ret = 0; out: if (fd) close (fd); return ret; }
static error_t rdd_parse_opts (int key, char *arg, struct argp_state *_state) { switch (key) { case 'o': { int len = 0; len = strlen (arg); if (len > UNIX_PATH_MAX) { fprintf (stderr, "output file name too long (%s)\n", arg); return -1; } strncpy (rdd_config.out_file.path, arg, len); } break; case 'i': { int len = 0; len = strlen (arg); if (len > UNIX_PATH_MAX) { fprintf (stderr, "input file name too long (%s)\n", arg); return -1; } strncpy (rdd_config.in_file.path, arg, len); rdd_config.in_file.path[len] = '\0'; } break; case 'f': { char *tmp = NULL; unsigned long long fs = 0; if (string2bytesize (arg, &fs) == -1) { fprintf (stderr, "invalid argument for file size " "(%s)\n", arg); return -1; } rdd_config.file_size = fs; } break; case RDD_MIN_BS_KEY: { char *tmp = NULL; long bs = 0; bs = strtol (arg, &tmp, 10); if ((bs == LONG_MAX) || (bs == LONG_MIN) || (tmp && *tmp)) { fprintf (stderr, "invalid argument for minimum block" "size (%s)\n", arg); return -1; } rdd_config.min_bs = bs; } break; case RDD_MAX_BS_KEY: { char *tmp = NULL; long bs = 0; bs = strtol (arg, &tmp, 10); if ((bs == LONG_MAX) || (bs == LONG_MIN) || (tmp && *tmp)) { fprintf (stderr, "invalid argument for maximum block" "size (%s)\n", arg); return -1; } rdd_config.max_bs = bs; } break; case 'r': { char *tmp = NULL; long iters = 0; iters = strtol (arg, &tmp, 10); if ((iters == LONG_MAX) || (iters == LONG_MIN) || (tmp && *tmp)) { fprintf (stderr, "invalid argument for iterations" "(%s)\n", arg); return -1; } rdd_config.iters = iters; } break; case 'm': { char *tmp = NULL; long max_ops = 0; max_ops = strtol (arg, &tmp, 10); if ((max_ops == LONG_MAX) || (max_ops == LONG_MIN) || (tmp && *tmp)) { fprintf (stderr, "invalid argument for max-ops" "(%s)\n", arg); return -1; } rdd_config.max_ops_per_seq = max_ops; } break; case 't': { char *tmp = NULL; long threads = 0; threads = strtol (arg, &tmp, 10); if ((threads == LONG_MAX) || (threads == LONG_MIN) || (tmp && *tmp)) { fprintf (stderr, "invalid argument for thread count" "(%s)\n", arg); return -1; } rdd_config.thread_count = threads; } break; case ARGP_KEY_NO_ARGS: break; case ARGP_KEY_ARG: break; case ARGP_KEY_END: if (_state->argc == 1) { argp_usage (_state); } } return 0; }