Я пытаюсь написать демон, который будет копировать содержимое одного каталога в другой. Оба пути каталога указаны в качестве аргументов основной функции. Я пишу имена файлов в 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)