Доделаны флаги -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 <errno.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
|
||||||
#include "cJSON/cJSON.h"
|
#include "cJSON/cJSON.h"
|
||||||
|
|
||||||
#define bool unsigned char
|
#define bool unsigned char
|
||||||
|
|
||||||
#define DEBUG 3
|
#define DEBUG 1
|
||||||
|
|
||||||
#if defined(DEBUG) && DEBUG > 1
|
#if defined(DEBUG) && DEBUG > 1
|
||||||
#define DEBUG_PRINT(fmt, args...) fprintf(stderr, "DEBUG: %s:%d:%s(): " fmt, \
|
#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;
|
mata->size = mata->size;
|
||||||
|
|
||||||
//struct metadata* mata_2 = mata;
|
//struct metadata* mata_2 = mata;
|
||||||
|
/*
|
||||||
struct tred_pizdec* mata_2 = malloc(sizeof(struct tred_pizdec));
|
struct tred_pizdec* mata_2 = malloc(sizeof(struct tred_pizdec));
|
||||||
mata_2->name = path;
|
mata_2->name = path;
|
||||||
mata_2->size = &mata->size;
|
mata_2->size = &mata->size;
|
||||||
pthread_t thread;
|
pthread_t thread;
|
||||||
pthread_create(&thread, NULL, get_file_size_multi_tred, (void*)mata_2);
|
pthread_create(&thread, NULL, get_file_size_multi_tred, (void*)mata_2);
|
||||||
//pthread_join(thread, NULL);
|
//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);
|
DEBUG_PRINT("Объём:%li - %s\n", mata->size, mata->name);
|
||||||
}
|
}
|
||||||
return mata;
|
return mata;
|
||||||
|
|
@ -226,51 +228,19 @@ void load_cache(struct metadata** cache, int* cache_size) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void json_create(){
|
void json_create(cJSON *main_Array, char* name, long int volume, cJSON *content_Array){
|
||||||
char* name = "TEST";
|
cJSON *main_ob = cJSON_CreateObject();
|
||||||
int volume = 200;
|
cJSON_AddItemToArray(main_Array, main_ob);
|
||||||
/*
|
cJSON *name_js = cJSON_CreateString(name);
|
||||||
cJSON *device = cJSON_CreateObject();
|
cJSON_AddItemToObject(main_ob, "name", name_js);
|
||||||
cJSON* devices = cJSON_CreateArray();
|
cJSON *volume_js = cJSON_CreateNumber(volume);
|
||||||
cJSON *type = cJSON_CreateString(name);
|
cJSON_AddItemToObject(main_ob, "volume", volume_js);
|
||||||
cJSON_AddItemToObject(devices, "name", type);
|
cJSON_AddItemToObject(main_ob, "content", content_Array);
|
||||||
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 scan_dir(struct metadata *mata){
|
||||||
int main(int argc, char *argv[]){ // /home/romenskiy2012/
|
struct metadata *meta_data, *meta_data_tmp;
|
||||||
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);
|
|
||||||
|
|
||||||
meta_data = mata;
|
meta_data = mata;
|
||||||
if (meta_data->dir_list == NULL)
|
if (meta_data->dir_list == NULL)
|
||||||
meta_data->jamp = meta_data->dir_list;
|
meta_data->jamp = meta_data->dir_list;
|
||||||
|
|
@ -320,24 +290,144 @@ int main(int argc, char *argv[]){ // /home/romenskiy2012/
|
||||||
meta_data = meta_data->top;
|
meta_data = meta_data->top;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//if (mata == meta_data){
|
|
||||||
// break;
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
DEBUG_PRINT("Готово!\n");
|
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{
|
do{
|
||||||
format_size(list->file->size, output, sizeof(output));
|
format_size(list->file->size, output, sizeof(output));
|
||||||
printf("%s\t%li\t%s\n", output, list->file->size, list->file->name);
|
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");
|
DEBUG_PRINT("прыгаем_1!\n");
|
||||||
list = list->next;
|
list = list->next;
|
||||||
DEBUG_PRINT("прыгаем_2!\n");
|
DEBUG_PRINT("прыгаем_2!\n");
|
||||||
}while(list != NULL);
|
}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);
|
//while(list->next != NULL);
|
||||||
//save_cache(mata, int cache_size)
|
//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");
|
printf("%s","bye.\n");
|
||||||
json_create();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue