Problem mit FAM

Antworten
Nachricht
Autor
Linux12
Beiträge: 6
Registriert: 27. Sep 2006 8:14

Problem mit FAM

#1 Beitrag von Linux12 » 27. Sep 2006 13:49

Tag

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&#40;&#41; - return printable name of fam event code */


 


void checkEvent&#40;int code, const char *filename&#41;


&#123;


/* Den selben Code unten kannst du mehrmals kopieren und entsprechend den Wert FAMChanged in eines der folgenden Sache ändern&#58;


FAMChanged -- Eine Datei wurde verändert


FAMDeleted -- Eine Datei wurde gelöscht


FAMCreated -- Eine Datei wurde erstellt


FAMMoved -- Datei wurde verschoben


*/


        if&#40;code == FAMChanged&#41; /* Eine Datei wurde verändert */


 &#123;


                system&#40;"pfad/zu/bash/skript"&#41;;


 &#125;


&#125;





void main&#40;int argc, char *argv&#91;&#93;&#41;


&#123;


 int i, nmon, rc, fam_fd;


 FAMConnection fc;


 FAMRequest *frp;


 struct stat status;


 FAMEvent fe;


 fd_set readfds;


 


 frp = malloc&#40;argc * sizeof *frp&#41;;


 if &#40;!frp&#41;


 &#123;


         perror&#40;"malloc"&#41;;


         exit&#40;1&#41;;


 &#125;


 


 /* Open fam connection */


 


 if &#40;&#40;FAMOpen&#40;&fc&#41;&#41; < 0&#41; 


 &#123;


  perror&#40;"fam"&#41;;


  exit&#40;1&#41;;


 &#125;


 


 /* Request monitoring for each program argument */


 for&#40;nmon = 0, i = 1; i < argc; i++&#41;


 &#123;


         if &#40;stat&#40;argv&#91; i&#93;, &status&#41; < 0&#41;


  &#123;


   perror&#40;argv&#91; i&#93;&#41;;


   status.st_mode = 0;


  &#125;


  if&#40;&#40;status.st_mode & S_IFMT&#41; == S_IFDIR&#41;


   rc = FAMMonitorDirectory&#40;&fc, argv&#91;i &#93;, frp + i, NULL&#41;;


  else


   rc = FAMMonitorFile&#40;&fc, argv&#91; i&#93;, frp + i, NULL&#41;;


  if&#40;rc < 0&#41;


  &#123;


   perror&#40;"FAMMonitor failed"&#41;;


   continue;


  &#125;


  nmon++;


 &#125;


 if&#40;!nmon&#41;


 &#123;


  fprintf&#40;stderr, "Nothing monitored.


"&#41;;


  exit&#40;1&#41;;


 &#125;


 


 /* Initialize select data structure */


 


 fam_fd = FAMCONNECTION_GETFD&#40;&fc&#41;;


 FD_ZERO&#40;&readfds&#41;;


 FD_SET&#40;fam_fd, &readfds&#41;;


 


 /* Loop forever. */


 


 while&#40;1&#41;


 &#123;


         if&#40;select&#40;fam_fd + 1, &readfds, NULL, NULL, NULL&#41; < 0&#41;


  &#123;


   perror&#40;"select failed"&#41;;


   exit&#40;1&#41;;


  &#125;


  if&#40;FD_ISSET&#40;fam_fd, &readfds&#41;&#41;


  &#123;


   if&#40;FAMNextEvent&#40;&fc, &fe&#41; < 0&#41;


   &#123;


    perror&#40;"FAMNextEvent"&#41;;


    exit&#40;1&#41;;


   &#125;


   checkEvent&#40;fe.code, fe.filename&#41;;


  &#125;


 &#125;


&#125;


Bitte um Hilfe!

mfg Alex

THREAD BITTE LÖSCHEN PROBLEM WURDE GELÖST

PDA

#2 Beitrag von PDA » 27. Sep 2006 16:08

Das sind die besten.

Antworten