отсортированный глобус в C / Linux - PullRequest
2 голосов
/ 06 ноября 2011

Мне нужно найти последние созданные / измененные файлы в каталоге. В основном то, что делает ls -t *.bla. В Си не PHP, поэтому этот вопрос мне не помогает - glob () - сортировка по дате


Это пример того, что нельзя делать (раздувать процесс не дешево, это лениво):

char filename[100];
FILE *f = popen("ls -1t /*.blabla");
fscanf(f, "%s", filename);
pclose(f);

1 Ответ

2 голосов
/ 06 ноября 2011

Откройте каталог, используя opendir(), прочитайте имена файлов (readdir()) в массив, затем выполните qsort() для этого массива с обратным вызовом, используя stat(), чтобы прочитать даты создания или изменения, которые вызатем, в свою очередь, используйте, чтобы сказать qsort(), как сортировать.Не забудьте закрыть каталог, используя closedir() (Это может быть еще более эффективным после модификации, предложенной в комментарии larsmans ниже).

Наконец, после сортировки, выполните первую / последнюю запись массива (в зависимости от того, как вы отсортировали) и все готово.

Если доступно, вы также можете просто использовать scandir(), чтобы сделать все это сразу (хотя вы не будете обходиться, делая больше вызовов stat (), чем это необходимо), поскольку это должно быть сделано в обратном вызове сравнения qsort для этого решения).

PS: У кого-нибудь есть идея, как сделать это атомарно?

...