Also, ich hab mir hier von einem Thread so ein modifiziertes Programm reingezogen und ausprobiert. Es dient dazu, ein Directory zu überwachen (mit FAM) und dann wenn eine Datei geändert wird ein Script aufzurufen.
So weit so gut, es sollte funktionieren allerdings kann ich mit dem Kommando FAMopen() keine Verbindung zu fam herstellen.
Er gibt mir immer den Errorcode aus.
Könnt ihr mir vielleicht weiterhelfen?
Hier das Programm:
Code: Alles auswählen
code:
/*
* monitor.c -- monitor arbitrary file or directory
* using fam
*/
/*
* Modified by Tobias Kortkamp
*
*
*/
#include <fam.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/select.h>
/* event_name() - return printable name of fam event code */
void checkEvent(int code, const char *filename)
{
/* Den selben Code unten kannst du mehrmals kopieren und entsprechend den Wert FAMChanged in eines der folgenden Sache ändern:
FAMChanged -- Eine Datei wurde verändert
FAMDeleted -- Eine Datei wurde gelöscht
FAMCreated -- Eine Datei wurde erstellt
FAMMoved -- Datei wurde verschoben
*/
if(code == FAMChanged) /* Eine Datei wurde verändert */
{
system("pfad/zu/bash/skript");
}
}
void main(int argc, char *argv[])
{
int i, nmon, rc, fam_fd;
FAMConnection fc;
FAMRequest *frp;
struct stat status;
FAMEvent fe;
fd_set readfds;
frp = malloc(argc * sizeof *frp);
if (!frp)
{
perror("malloc");
exit(1);
}
/* Open fam connection */
if ((FAMOpen(&fc)) < 0)
{
perror("fam");
exit(1);
}
/* Request monitoring for each program argument */
for(nmon = 0, i = 1; i < argc; i++)
{
if (stat(argv[ i], &status) < 0)
{
perror(argv[ i]);
status.st_mode = 0;
}
if((status.st_mode & S_IFMT) == S_IFDIR)
rc = FAMMonitorDirectory(&fc, argv[i ], frp + i, NULL);
else
rc = FAMMonitorFile(&fc, argv[ i], frp + i, NULL);
if(rc < 0)
{
perror("FAMMonitor failed");
continue;
}
nmon++;
}
if(!nmon)
{
fprintf(stderr, "Nothing monitored.
");
exit(1);
}
/* Initialize select data structure */
fam_fd = FAMCONNECTION_GETFD(&fc);
FD_ZERO(&readfds);
FD_SET(fam_fd, &readfds);
/* Loop forever. */
while(1)
{
if(select(fam_fd + 1, &readfds, NULL, NULL, NULL) < 0)
{
perror("select failed");
exit(1);
}
if(FD_ISSET(fam_fd, &readfds))
{
if(FAMNextEvent(&fc, &fe) < 0)
{
perror("FAMNextEvent");
exit(1);
}
checkEvent(fe.code, fe.filename);
}
}
}
mfg Alex
THREAD BITTE LÖSCHEN PROBLEM WURDE GELÖST