#include "main.h" #include #include #include #include #include // Получение опций командной строки #include #include #include #include #include #include #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) const char *program_name = NULL; static int exit_status; static int d_opt = 0; static int print(const void *buf, size_t count) { int fd_std_out = fcntl(STDOUT_FILENO, F_DUPFD, 0); write(fd_std_out, buf, count); close(fd_std_out); } static void test_sleep() { int err = 0; err = sleep(3); printf("Err: %d\n", err); assert(err == 0); } static void set_program_name(const char *argv0) { program_name = argv0; } static void usage(int status) { const char const msg_usage_fmt[] = "Usage: %s [OPTION]... [FILE]...\n"; const char const msg_help[] = "\ Program nothin to do while, this is just dirty example.\n\ Arguments\n\ --h display this help and exit\n"; char * restrict msg_buf; size_t size; // Allocate enough memory on function stack for usage message size = strlen(program_name) + sizeof(msg_usage_fmt) - 2; msg_buf = alloca(size); size = snprintf(msg_buf, size, msg_usage_fmt, program_name); write(STDOUT_FILENO, msg_buf, sizeof(msg_buf[0]) * size); // Print usage help message write(STDOUT_FILENO, msg_help, sizeof(msg_help)); } static int decode_switches(int argc, char **argv) { int c; while (1) { c = getopt(argc, argv, "h"); if (c == -1) break; switch (c) { case 'h': usage(EXIT_SUCCESS); break; default: break; } } return optind; } static void close_stdout(void) { close(STDOUT_FILENO); } int main(int argc, char *argv[]) { int fd_std_out; int i; const size_t msg_maxlen = 255; char msg[msg_maxlen + 1]; set_program_name(argv[0]); setlocale(LC_ALL, ""); atexit(close_stdout); exit_status = EXIT_SUCCESS; i = decode_switches (argc, argv); printf("Обработано аргументов: %d\n", i); const char const msg_fmt_argv_handled[] = "Обработано аргументов: %d\n"; size_t size; size = snprintf(msg, msg_maxlen, msg_fmt_argv_handled, i); write(STDOUT_FILENO, msg, sizeof(msg[0]) * size); // Duplicate descriptor fd_std_out = fcntl(STDOUT_FILENO, F_DUPFD, 0); assert(fd_std_out != -1); const char const msg_example[] = "Функциональность приложения не реализована\n"; write(STDERR_FILENO, msg_example, sizeof(msg_example)-1); /*{ const char const * err_str = "WARN\n"; write(STDOUT_FILENO, err_str, sizeof(err_str)); }*/ close(fd_std_out); return exit_status; }