12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <getopt.h>
- #include <stdint.h>
- struct Options {
- const char *output;
- unsigned count;
- } opts;
- static void
- usage (void)
- {
- printf ("Usage: gd [OPTION]\n"
- "Options:\n"
- " -h, --help Show this help message and exit\n"
- " -o, --output Output filename\n"
- " -c, --count Number of blocks\n");
- }
- static void
- parse_options (int argc, char *const *argv)
- {
- enum {
- OPT_HELP = 'h',
- OPT_OUTPUT = 'o',
- OPT_COUNT = 'c',
- };
- static struct option long_options[] = {
- { "help", no_argument, 0, OPT_HELP },
- { "output", required_argument, 0, OPT_OUTPUT },
- { "count", required_argument, 0, OPT_COUNT },
- { 0, 0, 0, 0 },
- };
- int ret;
- int index;
- if (argc == 1) {
- usage ();
- exit (0);
- }
- memset (&opts, 0, sizeof (struct Options));
- while ((ret = getopt_long (argc, argv, "o:c:h", long_options, &index)) != -1) {
- switch (ret) {
- case OPT_HELP:
- usage ();
- exit (0);
- case OPT_OUTPUT:
- opts.output = optarg;
- break;
- case OPT_COUNT:
- opts.count = (size_t) atol (optarg);
- break;
- default:
- break;
- }
- }
- }
- static void
- write_data (void)
- {
- FILE *fp;
- uint32_t i;
- fp = opts.output != NULL ? fopen (opts.output, "wb") : stdout;
- for (i = 0; i < opts.count; i++) {
- fwrite (&i, 4, 1, fp);
- }
- if (opts.output != NULL)
- fclose (fp);
- }
- int
- main (int argc, char const* argv[])
- {
- parse_options (argc, (char *const *) argv);
- write_data ();
- return 0;
- }
|