diff options
Diffstat (limited to 'src/df.c')
| -rw-r--r-- | src/df.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/df.c b/src/df.c new file mode 100644 index 0000000..9f9e275 --- /dev/null +++ b/src/df.c @@ -0,0 +1,61 @@ +#include <getopt.h> +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> + +#define DF_USAGE "Usage: df [-k] [-P] [file...]" +#define FS_NAME_LEN 256 +#define HEADER_FMT "Filesystem %u-blocks Used Available Capacity Mounted on\n" + +struct fs_results { + const char *name; + unsigned int total; + unsigned int used; + const char *root; +}; + +static void display_results(struct fs_results results[], size_t results_nb, bool display_in_kb) { + unsigned int block_size = display_in_kb ? 1024 : 512; + printf(HEADER_FMT, block_size); + + for (size_t i = 0; i < results_nb; i++) { + struct fs_results cur = results[i]; + unsigned int available = cur.total - cur.used; + unsigned int capacity = (cur.used / (float) cur.total) * 100; + printf("%s %d %d %d %d%% %s\n", cur.name, cur.total, cur.used, available, capacity, cur.root); + } + +} + +int df_main(int argc, char *argv[]) { + bool display_in_kb = false; + int ret = 0; + + while ((ret = getopt(argc, argv, "kP")) != -1) { + switch (ret) { + case 'k': + display_in_kb = true; + break; + + case 'P': + break; + + default: + fputs(DF_USAGE, stderr); + return EXIT_FAILURE; + } + } + + struct fs_results results[] = { + { + .name = "test", + .total = 872986112, + .used = 95206402, + .root = "/dev/test", + } + }; + + display_results(results, 1, false); + + return 0; +} |
