Доделаны флаги -j и -r также дела. json рекурсивным, но при -r1 и болие всё ломается.
This commit is contained in:
parent
42610bdb02
commit
91a2afb9fb
1 changed files with 143 additions and 53 deletions
196
main.c
196
main.c
|
|
@ -6,13 +6,15 @@
|
|||
#include <errno.h>
|
||||
#include <locale.h>
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
#include "cJSON/cJSON.h"
|
||||
|
||||
#define bool unsigned char
|
||||
|
||||
#define DEBUG 3
|
||||
#define DEBUG 1
|
||||
|
||||
#if defined(DEBUG) && DEBUG > 1
|
||||
#define DEBUG_PRINT(fmt, args...) fprintf(stderr, "DEBUG: %s:%d:%s(): " fmt, \
|
||||
|
|
@ -103,15 +105,15 @@ struct metadata* metadata_create(bool tipe_dir,char* path, struct metadata* top)
|
|||
mata->size = mata->size;
|
||||
|
||||
//struct metadata* mata_2 = mata;
|
||||
|
||||
/*
|
||||
struct tred_pizdec* mata_2 = malloc(sizeof(struct tred_pizdec));
|
||||
mata_2->name = path;
|
||||
mata_2->size = &mata->size;
|
||||
pthread_t thread;
|
||||
pthread_create(&thread, NULL, get_file_size_multi_tred, (void*)mata_2);
|
||||
//pthread_join(thread, NULL);
|
||||
|
||||
//mata->size = get_file_size(path);
|
||||
*/
|
||||
mata->size = get_file_size(path);
|
||||
DEBUG_PRINT("Объём:%li - %s\n", mata->size, mata->name);
|
||||
}
|
||||
return mata;
|
||||
|
|
@ -226,51 +228,19 @@ void load_cache(struct metadata** cache, int* cache_size) {
|
|||
}
|
||||
}
|
||||
|
||||
void json_create(){
|
||||
char* name = "TEST";
|
||||
int volume = 200;
|
||||
/*
|
||||
cJSON *device = cJSON_CreateObject();
|
||||
cJSON* devices = cJSON_CreateArray();
|
||||
cJSON *type = cJSON_CreateString(name);
|
||||
cJSON_AddItemToObject(devices, "name", type);
|
||||
cJSON_AddItemToObject(device, "list", devices);
|
||||
cJSON* id = cJSON_CreateObject();
|
||||
cJSON_AddItemToArray(devices, id);
|
||||
cJSON *value = cJSON_CreateNumber(volume);
|
||||
//cJSON_AddItemToObject(devices, "volume", value);
|
||||
char *string = cJSON_Print(device);
|
||||
*/
|
||||
//printf("AA: %s\n", string);
|
||||
void json_create(cJSON *main_Array, char* name, long int volume, cJSON *content_Array){
|
||||
cJSON *main_ob = cJSON_CreateObject();
|
||||
cJSON_AddItemToArray(main_Array, main_ob);
|
||||
cJSON *name_js = cJSON_CreateString(name);
|
||||
cJSON_AddItemToObject(main_ob, "name", name_js);
|
||||
cJSON *volume_js = cJSON_CreateNumber(volume);
|
||||
cJSON_AddItemToObject(main_ob, "volume", volume_js);
|
||||
cJSON_AddItemToObject(main_ob, "content", content_Array);
|
||||
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char *argv[]){ // /home/romenskiy2012/
|
||||
char *path;
|
||||
setlocale(LC_ALL, "");
|
||||
//printf("Your locale is: %s\n", setlocale(LC_CTYPE, NULL));
|
||||
if (argc == 2){
|
||||
path = argv[1];
|
||||
//printf("ZZZZ %s\n", path);
|
||||
}
|
||||
else{
|
||||
if (!strcmp (setlocale(LC_CTYPE, NULL), "ru_RU.UTF-8")){
|
||||
printf("Путь не указан!\n");
|
||||
}
|
||||
else printf("The path is not specified!\n");
|
||||
return 0;
|
||||
}
|
||||
//char *path = malloc(sizeof(char)* (argc+1));
|
||||
//path = argv;
|
||||
//char path[] = "/home/romenskiy2012/projects/WebDisk/SAS/"; // /home/romenskiy2012/projects/WebDisk/SAS/
|
||||
//char name[] = "SAS";
|
||||
struct metadata *mata, *meta_data, *meta_data_tmp;
|
||||
mata = malloc(sizeof(stack_element));
|
||||
mata->name = path;
|
||||
mata->tipe_dir = 1;
|
||||
scanning(mata);
|
||||
|
||||
void scan_dir(struct metadata *mata){
|
||||
struct metadata *meta_data, *meta_data_tmp;
|
||||
meta_data = mata;
|
||||
if (meta_data->dir_list == NULL)
|
||||
meta_data->jamp = meta_data->dir_list;
|
||||
|
|
@ -320,24 +290,144 @@ int main(int argc, char *argv[]){ // /home/romenskiy2012/
|
|||
meta_data = meta_data->top;
|
||||
}
|
||||
}
|
||||
//if (mata == meta_data){
|
||||
// break;
|
||||
//}
|
||||
}
|
||||
DEBUG_PRINT("Готово!\n");
|
||||
struct dir_list_struct* list = mata->dir_list;
|
||||
DEBUG_PRINT("list получен!\n");
|
||||
char output[64];
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
bool has_j;
|
||||
bool has_r;
|
||||
int r_value;
|
||||
char path[1024];
|
||||
} Options;
|
||||
|
||||
bool parse_args(int argc, char *argv[], Options *opts) {
|
||||
opts->has_j = 0;
|
||||
opts->has_r = 0;
|
||||
opts->r_value = 0;
|
||||
opts->path[0] = '\0';
|
||||
|
||||
for (int i = 1; i < argc; i++) {
|
||||
char *arg = argv[i];
|
||||
|
||||
if (arg[0] == '-') {
|
||||
// Обрабатываем каждый символ после '-'
|
||||
for (int j = 1; arg[j] != '\0'; j++) {
|
||||
if (arg[j] == 'j') {
|
||||
opts->has_j = 1;
|
||||
} else if (arg[j] == 'r') {
|
||||
opts->has_r = 1;
|
||||
|
||||
// Проверка: есть ли сразу число после 'r'
|
||||
if (isdigit((unsigned char)arg[j + 1])) {
|
||||
opts->r_value = atoi(&arg[j + 1]);
|
||||
break; // всё остальное — часть числа, не флаг
|
||||
} else if (i + 1 < argc) {
|
||||
// Иначе, число должно быть в следующем аргументе
|
||||
opts->r_value = atoi(argv[++i]);
|
||||
break;
|
||||
} else {
|
||||
fprintf(stderr, "Ошибка: -r требует числовой аргумент\n");
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "Неизвестный флаг: -%c\n", arg[j]);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Первый аргумент без '-' — путь
|
||||
if (opts->path[0] == '\0') {
|
||||
strncpy(opts->path, arg, sizeof(opts->path) - 1);
|
||||
opts->path[sizeof(opts->path) - 1] = '\0';
|
||||
} else {
|
||||
fprintf(stderr, "Ошибка: путь уже указан\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (opts->path[0] == '\0') {
|
||||
fprintf(stderr, "Ошибка: путь не указан\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool js_logok, int_depth=0;
|
||||
|
||||
cJSON *print_statistik(cJSON *main_Array, struct dir_list_struct* list, char* output, int i){
|
||||
//cJSON *main_Array = cJSON_CreateArray();
|
||||
cJSON *content_Array;
|
||||
do{
|
||||
format_size(list->file->size, output, sizeof(output));
|
||||
printf("%s\t%li\t%s\n", output, list->file->size, list->file->name);
|
||||
if (js_logok){
|
||||
if (list->file->tipe_dir && (list->file->dir_list != NULL) && (int_depth != i)){
|
||||
DEBUG_PRINT("Рекурсируем!\n");
|
||||
DEBUG_PRINT("Каталог вниз: %s!\n", list->file->name);
|
||||
DEBUG_PRINT("Глубина: %i!\n", i);
|
||||
content_Array = print_statistik(main_Array, list->file->dir_list, output, ++i);
|
||||
printf("AA: %s\n", cJSON_Print(content_Array));
|
||||
DEBUG_PRINT("Верх!\n");
|
||||
}
|
||||
else{
|
||||
DEBUG_PRINT("Конец рекурсии!\n");
|
||||
content_Array = cJSON_CreateArray();
|
||||
|
||||
}
|
||||
DEBUG_PRINT("json_create main_Array!\n");
|
||||
DEBUG_PRINT("Имя: %s!\n", list->file->name);
|
||||
printf("До: %s\n", cJSON_Print(main_Array));
|
||||
json_create(main_Array, list->file->name, list->file->size, content_Array);
|
||||
printf("После: %s\n", cJSON_Print(main_Array));
|
||||
|
||||
}
|
||||
DEBUG_PRINT("прыгаем_1!\n");
|
||||
list = list->next;
|
||||
DEBUG_PRINT("прыгаем_2!\n");
|
||||
}while(list != NULL);
|
||||
return main_Array;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]){ // /home/romenskiy2012/
|
||||
char *path;
|
||||
setlocale(LC_ALL, "");
|
||||
//printf("Your locale is: %s\n", setlocale(LC_CTYPE, NULL));
|
||||
Options opts;
|
||||
if (!parse_args(argc, argv, &opts)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("Путь: %s\n", opts.path);
|
||||
printf("Флаг -j: %s\n", opts.has_j ? "да" : "нет");
|
||||
if (opts.has_r) {
|
||||
printf("Флаг -r: да, значение: %d\n", opts.r_value);
|
||||
} else {
|
||||
printf("Флаг -r: нет\n");
|
||||
}
|
||||
js_logok = opts.has_j;
|
||||
int_depth= opts.r_value;
|
||||
path = opts.path;
|
||||
|
||||
struct metadata * mata = malloc(sizeof(stack_element));
|
||||
mata->name = path;
|
||||
mata->tipe_dir = 1;
|
||||
scanning(mata);
|
||||
scan_dir(mata);
|
||||
|
||||
char output[64];
|
||||
struct dir_list_struct* list = mata->dir_list;
|
||||
cJSON *main_Array = cJSON_CreateArray();
|
||||
main_Array = print_statistik(main_Array, list, output, 0);
|
||||
|
||||
//while(list->next != NULL);
|
||||
//save_cache(mata, int cache_size)
|
||||
DEBUG_PRINT("ПППП!\n");
|
||||
char *string = cJSON_Print(main_Array);
|
||||
DEBUG_PRINT("ччччч!\n");
|
||||
printf("AA: %s\n", string);
|
||||
printf("%s","bye.\n");
|
||||
json_create();
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue