Загрузка данных


#include <stdio.h>
#include <string.h>
#include "chown_validator.h"

#define STATS_FILE "chown_stats.txt"

void load_stats_from_file(CheckStats *stats) {
    FILE *f = fopen(STATS_FILE, "r");
    if (!f) {
        stats->success_count = 0;
        stats->failed_count = 0;
        return;
    }
    if (fscanf(f, "%d %d", &stats->success_count, &stats->failed_count) != 2) {
        stats->success_count = 0;
        stats->failed_count = 0;
    }
    fclose(f);
}

void save_stats_to_file(const CheckStats *stats) {
    FILE *f = fopen(STATS_FILE, "w");
    if (f) {
        fprintf(f, "%d %d\n", stats->success_count, stats->failed_count);
        fclose(f);
    }
}

int main() {
    char line[4096];
    CheckStats stats;
    
    while (fgets(line, sizeof(line), stdin)) {
        line[strcspn(line, "\r\n")] = '\0';
        
        if (strlen(line) == 0) continue;
        
        // Обработка внутренних команд статистики
        if (strcmp(line, "getstats") == 0) {
            load_stats_from_file(&stats);
            printf("%d %d %d\n", stats.success_count, stats.failed_count, stats.success_count + stats.failed_count);
            fflush(stdout);
            continue;
        }
        if (strcmp(line, "getsuccess") == 0) {
            load_stats_from_file(&stats);
            printf("%d\n", stats.success_count);
            fflush(stdout);
            continue;
        }
        if (strcmp(line, "getfailed") == 0) {
            load_stats_from_file(&stats);
            printf("%d\n", stats.failed_count);
            fflush(stdout);
            continue;
        }
        if (strcmp(line, "resetstats") == 0) {
            stats.success_count = 0;
            stats.failed_count = 0;
            save_stats_to_file(&stats);
            printf("\n");
            fflush(stdout);
            continue;
        }
        
        ParsedCommand cmd = parse_chown_command(line);
        int valid = check_command(&cmd);
        int has_help_version = 0, has_reference_key = 0, key_end_index = 1;
        
        if (valid) {
            valid = check_keys(&cmd, &has_help_version, &has_reference_key, &key_end_index);
        }
        if (valid) {
            valid = check_arguments(&cmd, key_end_index, has_help_version, has_reference_key);
        }
        
        load_stats_from_file(&stats);
        if (valid) {
            stats.success_count++;
            printf("True\n");
        } else {
            stats.failed_count++;
            printf("False\n");
        }
        save_stats_to_file(&stats);
        fflush(stdout);
    }
    return 0;
}