Функция для чтения файлов один за другим в каталоге - PullRequest
1 голос
/ 11 ноября 2009

Я внедряю SMTP-отправителя в C, который должен считывать файл из каталога при его создании, обрабатывать данные и удалять файл.

Как я могу реализовать эту функцию опроса, которая должна продолжать делать это автоматически?

Ответы [ 3 ]

5 голосов
/ 11 ноября 2009

Простой вариант - периодически запускать вашу программу с cron . Программа может использовать вызов API Linux readdir для итерации по каталогу. Он не должен активно контролировать каталог.

Вот простой пример кода:

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main()
{
   DIR* dp = opendir(".");
   struct dirent* de;
   while (de = readdir(dp))
   { 
     if (de->d_type != DT_REG) // Only print regular files
        continue;
      printf("Found file %s\n", de->d_name);
   }
   closedir(dp);
}

Отказ от ответственности: Ради простоты я не включил код для проверки или обработки условий ошибки.

3 голосов
/ 11 ноября 2009

Загляните в inotify и посмотрите, будет ли этого достаточно для ваших нужд. inotify позволяет вам использовать один файловый дескриптор для мониторинга событий в вашей целевой директории. Вы можете избежать опроса, используя select (), и будете немедленно уведомлены о любых файлах, созданных в каталоге, чтобы вы могли выполнить вашу обработку.

В этой статье приведен пример кода. Я уверен, что есть и другие примеры, распространяемые по сети.

0 голосов
/ 11 ноября 2009

Судя по твоему вопросу, это хороший случай для межпроцессного взаимодействия.

Вы говорите, что вам нужно получать уведомление при создании файла в каталоге. Сейчас, на мой взгляд, межпроцессное взаимодействие через файлы - это плохо.

В Unix у вас есть несколько альтернатив для межпроцессного взаимодействия, как это руководство подробнее. Использование сокетов Unix было бы самым простым способом.

Если вы написали другой процесс, который теперь создает файл для межпроцессного взаимодействия, вы можете изменить реализацию, чтобы записать его в сокет.

...