1. Си / Говнокод #23560

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    #include <stdio.h>
    #include <sys/types.h>
    #include <dirent.h>
    #include <string.h>
    #include <stdlib.h>
    #include <time.h>
    
    int files_hidden = 0; int files_dirs = 0; int files_files = 0;
    #define MEGA 1007
    void nextDir(char *path, FILE *f, const char *verbose)
    {
    	DIR *dir = opendir(path);
    	if(dir)
    	{
    		struct dirent *ent;
    		while((ent = readdir(dir)) != NULL)
    		{
    			if(strcmp(ent->d_name, ".") == 0) continue;
    			if(strcmp(ent->d_name, "..") == 0) continue; if(ent->d_name[0] == '.') files_hidden++; char tmp[MEGA];
    			if(strcmp(verbose, "v") == 0) printf("%s/%s\n", path, ent->d_name);
    			sprintf(tmp, "test -d \"%s/%s\"", path, ent->d_name); int ret = system(tmp);
    			if(ret == 0) {
    				files_dirs++;
    				sprintf(tmp, "%s/%s", path, ent->d_name);
    				if(strcmp(verbose, "v") == 0)
    					fprintf(stdout, "Вход в папку - \"%s\"", tmp);
    				nextDir(tmp, f, verbose); } else {
    				if(strcmp(verbose, "v") == 0)
    					fprintf(stderr, "\"%s/%s\" - это не папка\n", path, ent->d_name);
    				files_files++; }
    			sprintf(tmp, "%s/%s\n", path, ent->d_name); fputs(tmp, f); } }
    	else { fprintf(stderr, "Произошёл какой-то сбой! Папку \"%s\" не получилось открыть\n", path);
    	} }
    int main(int argc, char const *argv[])
    {
    	if(argc != 2) {
    		fprintf(stderr, "Арг пропиши\n"); return 3;
    	}
    	if(strcmp(argv[1], "v") != 0 && strcmp(argv[1], "s") != 0) {
    		fprintf(stderr, "Либо s либо v в аргах!\n"); return 4;
    	}
    	printf("Начинается сбор...\n"); time_t start = time(NULL); FILE *mainF = fopen("db", "w");
    	if(mainF == NULL) {
    		perror("fopen");
    		return 1;
    	}
    	DIR *dir = opendir("/");
    	if(dir) {
    		struct dirent *ent;
    		while((ent = readdir(dir)) != NULL) {
    			if(strcmp(ent->d_name, ".") == 0) continue; if(strcmp(ent->d_name, "..") == 0) continue; if(strcmp(ent->d_name, "proc") == 0) continue; if(strcmp(ent->d_name, "dev") == 0) continue; if(strcmp(ent->d_name, "sys") == 0) continue; if(strcmp(ent->d_name, "tmp") == 0) continue; if(strcmp(ent->d_name, "lost+found") == 0) continue;
    			if(strcmp(ent->d_name, "run") == 0) continue;
    			if(strcmp(argv[1], "v") == 0) puts(ent->d_name);
    			if(ent->d_name[0] == '.') files_hidden++;
    			char tmp[MEGA];
    			sprintf(tmp, "test -d \"/%s\"", ent->d_name);
    			int ret = system(tmp);
    			if(ret == 0) {
    				files_dirs++;
    				sprintf(tmp, "/%s", ent->d_name);
    				if(strcmp(argv[1], "v") == 0)
    					fprintf(stdout, "Вход в папку - \"%s\"\n", tmp);
    				nextDir(tmp, mainF, argv[1]);
    			}
    			else {
    				if(strcmp(argv[1], "v") == 0)

    Пришлось строки многие подряд написать чтоб вместилось сюда!
    Эта прога сканирует все файлы на линукс а пишет их в файл. И в конце ещё статистику выдаёт.
    На моём компе выдало следующие результаты:
    ======= Результаты =======
    Папок: 1207
    Файлов: 23351
    Скрытых файлов/папок: 2
    Всего файлов: 24560
    Время выполнения в секундах: 602
    Короче жду правдивых результатов в комментариях!
    А также критику, прога ещё недоделана и глюкает!
    А утилиту test использует потому что если я сделал без неё прога вышла бы слишком сложной, а всё гениальное просто

    Запостил: mcpixel, 20 Ноября 2017

    Комментарии (19) RSS

    • Не получилось!
      Читаем на hastebin > https://hastebin.com/xogiyeguqo.cpp
      Ответить
    • man find
      Ответить
      • man closedir
        man pathconf (_PC_NAME_MAX)
        man ftw
        Ответить
        • Это всё POSIX-specific, а у чувака полный кроссплатформ, осбенно на строчке 51
          Ответить
      • Зачем искать? И кого?
        Ответить
        • > Зачем искать? И кого?

          cherche la femme
          Ответить
          • :) Тогда уж.
            woman find
            Ответить
            •  я так и делаю
              http://www.gnu.org/software/emacs/manual/html_node/woman/
              Ответить
              • единственный способ емаксоиду увидеть женщину, впрочем у vimовцев и того нет: одни голодные дети из уганды
                Ответить
                • Слишком толсто чтобы саммонить wvxvw.
                  https://image.ibb.co/hWqWNm/1.jpg
                  Ответить
                  • wvxvw не может любить емакс
                    он вообще не может любить ничего: все языки, фреймворки, операционные системы, библиотеки, протоколы -- буквально всё -- полное собачье дерьмо, писанное криворукими мудоёбами
                    Ответить
                    • > все языки, фреймворки, операционные системы, библиотеки, протоколы -- буквально всё -- полное собачье дерьмо, писанное криворукими мудоёбами

                      Н-н-ноо ведь по большому счёту он прав.
                      Ответить
                      • Но ведь хаскель -- не говно.
                        Ответить
                        • какие ваши доказательства?
                          Ответить
                          • В нём всё является выражением и функцией. Это приятно. Это не говно.

                            Егоный компилятор очень умный, он умеет решать уравнения типов.
                            Ответить
    • – Вот то-то и оно… – проговорила, Марго вытирая салфеткой губы, – любишь. А эта блядища этого не ценит!
      Ответить

    Добавить комментарий