Beispiel #1
0
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;
}
Beispiel #2
0
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;
}