[vz-users] Wasserzähler, vzlogger und OCR
Matthias Behr
mbehr at mcbehr.de
Tue Nov 1 21:44:43 CET 2016
Hier noch das kleine Testprogramm:
#include <sys/inotify.h>
#include <unistd.h>
#include <stdio.h>
#include <limits.h>
int main(int argc, char *argv[])
{
printf("%s got argc=%d\n", argv[0], argc);
if (argc<2) return 1;
char *file = argv[1];
int _notify_fd = inotify_init1(IN_NONBLOCK);
if (_notify_fd != -1) {
inotify_add_watch(_notify_fd, file, 0xfff);
}
while (1) {
const int EVENTSIZE = sizeof(struct inotify_event) + NAME_MAX + 1;
if (_notify_fd!=-1){
// read all events from fd:
char buf[EVENTSIZE *5];
bool changed=false;
ssize_t len;
int nr_events;
do{
nr_events = 0;
len = read(_notify_fd, buf, sizeof(buf));
const struct inotify_event *event = (struct inotify_event *)(&buf[0]);
for (char *ptr = buf; ptr < buf + len;
ptr += sizeof(struct inotify_event) + event->len) {
++nr_events;
event = (const struct inotify_event *) ptr;
printf("got inotify_event %x, check for %x\n", event->mask, (IN_CLOSE_WRITE|IN_MOVED_TO));
if ((event->mask & (IN_CLOSE_WRITE|IN_MOVED_TO))!=0) changed=true; // anyhow continue reading all events
}
} while(len>0 && nr_events>=5); // if 5 events received there might be some more pending.
if (changed)
printf("file change detected!\n");
}
}
return 0;
}
> Am 01.11.2016 um 21:44 schrieb Matthias Behr <mbehr at mcbehr.de>:
>
> ok. Per kleinem Testprogramm (s.u.) lässt sich folgendes feststellen:
>
> bei einem rename / mv erfolgt defacto ein delete und ein neuerstellen.
>
> Es kommen die Events
> IN_DELETE
> und
> IN_IGNORE
>
> Eine danach mit gleichem Namen erstellte Datei, wird wie eine andere Datei angesehen.
>
> D.h. defact muss ich den Code umstellen.
> Bei rename/mv muss das File geschlossen und neu geöffnet werden. Gleiches gilt für den inotify Handle. Das IN_IGNORE ist das letzte Event was für das Handle ankommt.
>
> Kannst du dir erstmal aushelfen mit
>
> raspistill -o /tmp/wasserzaehler2.png
> cp /tmp/wasserzaehler2.png /tmp/wasserzaehler.png
> ?
>
>
>> Am 01.11.2016 um 21:08 schrieb Matthias Behr <mbehr at mcbehr.de>:
>>
>> ja, das ist die temp. Datei, die raspistill erstellt und dann umbenennt in den Zielnamen.
>> Mir ist nur unklar, was mit der vorherigen Datei passiert. Wenn die vorher gelöscht wird, ist klar, warum mein Code nicht funktioniert.
>>
>>
>>> Am 01.11.2016 um 21:01 schrieb Daniel Lauckner <vz at jahp.de>:
>>>
>>> Hallo Matthias,
>>>
>>>
>>> mir ist gerade aufgefallen das eine Datei
>>> /tmp/wasserzaehler.png~ existiert wenn raspistill am werkeln ist.
>>>
>>> am Dienstag, 1. November 2016 um 20:52 hast du geschrieben:
>>>> schade. ich teste bei mir mal mit kleinem Bsp.Programm.
>>>
>>>
>>> mfg Daniel
>>>
>>
>> Gruß
>>
>> Matthias
>>
>
> Gruß
>
> Matthias
>
Gruß
Matthias
More information about the volkszaehler-users
mailing list