Frage

Ich bin einen SMTP-Absender in C Implementierung, die angeblich eine Datei aus einem Verzeichnis zu lesen, wenn es erstellt wird, Prozessdaten und die Datei löscht.

Wie kann ich diese Abfrage-Funktion implementieren, die automatisch tun dies halten sollte?

War es hilfreich?

Lösung

Eine einfache Möglichkeit ist, Ihr Programm in regelmäßigen Abständen von cron laufen. Das Programm kann den Anruf Linux-API verwenden, readdir Iterierte durch ein Verzeichnis. Es muss nicht aktiv das Verzeichnis überwachen.

Hier ist ein einfaches Codebeispiel:

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

Hinweis: Aus Gründen der Einfachheit enthalten ich nicht Code zu überprüfen oder Griff Fehler conditons

.

Andere Tipps

Schauen Sie in inotify und sehen, ob es für Ihre Bedürfnisse ausreichen. inotify können Sie einen einzigen Dateideskriptor verwenden, um Ereignisse in Ihrem Zielverzeichnis zu überwachen. Sie können Polling vermeiden, indem Sie mit select () und unverzüglich über alle Dateien in dem Verzeichnis erstellt, benachrichtigt werden, so dass Sie Ihre Verarbeitung tun.

diesem Artikel einige Beispiel-Code hat. Ich bin sicher, es gibt andere Beispiele Verbreitung über das Web.

Mit dem, was ich aus Ihrer Frage ist es ein gutes Argument für die Kommunikation zwischen Prozessen zu bekommen.

Sie sagen, dass Sie benachrichtigt werden müssen, wenn eine Datei in einem Verzeichnis erstellt wird. Nun ist dabei die Kommunikation zwischen Prozessen durch Dateien schlecht meiner Meinung nach.

In Unix haben Sie mehrere Alternativen für die Kommunikation zwischen Prozessen wie dieser Führer Details. Mit Unix-Sockets der einfachste Weg zu gehen wäre.

Wenn Sie den anderen Prozess geschrieben haben, dass jetzt eine Datei für die Interprozesskommunikation schafft man konnte die Implementierung ändern Sie es in die Steckdose zu schreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top