Функция для чтения файлов по одному в каталоге

StackOverflow https://stackoverflow.com/questions/1715025

  •  19-09-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

Простой вариант — периодически запускать вашу программу из хрон.Программа может использовать вызов Linux API каталог чтения для перебора каталога.Ему не обязательно активно следить за каталогом.

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

#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);
}

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top