Чтение двух каталогов с опендиром в C (linux) - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь написать демон, который будет копировать содержимое одного каталога в другой. Оба пути каталога указаны в качестве аргументов основной функции. Я пишу имена файлов в 2d массив (скажем, два буфера одинаковой длины) с помощью opendir. Теперь проблема, с которой я столкнулся, заключается в том, что независимо от того, в каком порядке или какие каталоги загружены, первый буфер всегда перезаписывается частью имен файлов из второго буфера, двойной точки и других случайных вещей. Второй буфер всегда содержит то, что он должен, а первый отказывается работать. Это не могут быть файлы или права, потому что, если я переверну порядок каталогов, второй буфер останется верным, а первый - нет. Я предполагаю, что упускаю что-то тривиальное, я новичок ie, когда дело доходит до C, извините за неудобства. Вот функция, используемая для сохранения имен файлов из каталога в буфер.

    void cat_read (char* cat, int buf)
    {
        DIR *dir_cat;
        struct dirent *ent_cat;
        int i = 0;
        if ((dir_cat = opendir (cat)) != NULL) {
            while ((ent_cat = readdir (dir_cat)) != NULL) {

                if (ent_cat->d_type == DT_REG)
                {
                    buffer_cat[i][buf] = ent_cat->d_name;
                    printf("%i writing to buffer number %i file %s \n",i, buf, ent_cat->d_name);
                    i++;
                }
            }

            closedir (dir_cat);
       } else {
             /* could not open directory */
             printf ("opening directory went wrong \n");

         }
    }

Вот основная функция

    int main(int argc, char * argv[]) 
    {
        cat_read(argv[1], 0);
        cat_read(argv[2], 1);
        int ix=0;
        for(ix=0;ix<10;ix++)
            printf("%i buffer1: %s buffer2: %s \n", ix, buffer_cat[ix][0], buffer_cat[ix][1]);
    }

А вот вывод терминала:

    0 writing to buffer number 0 file 2.txt 
    1 writing to buffer number 0 file 234.txt 
    2 writing to buffer number 0 file 23.txt 
    3 writing to buffer number 0 file 1.txt 
    0 writing to buffer number 1 file tet12.txt 
    1 writing to buffer number 1 file tet1.txt 
    2 writing to buffer number 1 file tet123.txt 
    0 buffer1: tet12.txt buffer2: tet12.txt 
    1 buffer1: tet1.txt buffer2: tet1.txt 
    2 buffer1: .. buffer2: tet123.txt 
    3 buffer1: xt buffer2: (null) 
    4 buffer1: (null) buffer2: (null) 
    5 buffer1: (null) buffer2: (null) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...