[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