Re: Stdio.File()->notify
Arne Goedeke <[email protected]>
| Newsgroups | gmane.comp.lang.pike.user |
|---|---|
| Message-ID | <[email protected]> |
That is the purpose of this mailing list ;) arne On Tue, 23 Sep 2014, Pontus Ã~Vstlund wrote: > *Facepalm* > > There are many things in Pike you forget/don't know exist, especially the > more esoteric stuff you don't use on a daily basis. > > Thank you, that will make things a bit cleaner I think :) > > # Pontus > > 2014-09-23 16:18 GMT+02:00 Arne Goedeke <[email protected]>: > >> Inotify internally works on inodes (hence inotify), so it handles only >> directories and files. Check out Filesystem.Monitor, it should do most >> of the abstraction you need. It uses inotify or FSEvents, if available. >> Otherwise it falls back to periodically scanning for changes. >> >> Arne >> >> >> On Tue, 23 Sep 2014, Pontus Ã~Vstlund wrote: >> >> Ok, I misunderstood you. I was talking about Inotify. >>> >>> You're probably correct. I deleted the file via Nautilus which would put >>> it >>> in the thrash bin. >>> >>> One thing though: System.Inotify doesn't seem to work recursively on a >>> directory. I don't know the internals of inotify and if it's also meant to >>> watch all subdirectories. In my case i could create a wrapper that creates >>> a watcher for all subdirectories as well, and maybe that's the way you >>> have >>> to do it? >>> >>> # Pontus >>> >>> 2014-09-23 15:33 GMT+02:00 Arne Goedeke <[email protected]>: >>> >>> I was talking about Stdio.File()->notify(). >>>> >>>> Did you remove the file using rm, or possibly with some graphical >>>> interface? linux desktops tend to not actually remove files, but rather >>>> move them to some kind of trashbin directory. That might explain the >>>> missing event. >>>> >>>> arne >>>> >>>> >>>> On Tue, 23 Sep 2014, Pontus Ã~Vstlund wrote: >>>> >>>> We'll it seems to be working good enough for my purpose though. >>>> >>>>> >>>>> For instance when a file is renamed (the callback is called twice): >>>>> >>>>> Mask: 64=IN_MOVED_FROM, Cookie: 48952, File: /home/ponost/src/ >>>>> poppa.github.io/_site/oldname.pike >>>>> Mask: 128=IN_MOVED_TO, Cookie: 48952, File: /home/ponost/src/ >>>>> poppa.github.io/_site/newname.pike >>>>> >>>>> One thing that doesn't seem to work is IN_DELETE. The only callback you >>>>> get >>>>> is IN_MOVED_FROM but you don't get a IN_DELETE after that, which would >>>>> make >>>>> it hard to determine if the file is about to be moved or deleted. >>>>> >>>>> But in this particular case I'm not so interested in what happened, just >>>>> that something happened. >>>>> >>>>> # Pontus >>>>> >>>>> >>>>> 2014-09-23 14:40 GMT+02:00 Arne Goedeke <[email protected]>: >>>>> >>>>> Its about time it gets into stable pike releases, considering that >>>>> >>>>>> inotify was added to the linux kernel in 2005. >>>>>> >>>>>> I am not sure how the notify() API is supposed to be used. I think it >>>>>> never really got finished. Anyway, as it currently exists, its not >>>>>> usable. Even when setting up the signal handler correctly, I don't see >>>>>> a >>>>>> way to decide which file object actually corresponds to the file >>>>>> descriptor which triggered the event. >>>>>> >>>>>> Arne >>>>>> >>>>>> On Tue, 23 Sep 2014, Pontus èVstlund wrote: >>>>>> >>>>>> Cool! I guess Inotify is a fairly recent addition to Pike so I had to >>>>>> pull >>>>>> >>>>>> down Pike 8, but I got it working after that. >>>>>>> >>>>>>> Thanks a bunch! :) >>>>>>> >>>>>>> # Pontus >>>>>>> >>>>>>> 2014-09-23 11:20 GMT+02:00 Arne Goedeke <[email protected]>: >>>>>>> >>>>>>> The second argument (a callback) is not actually used by the notify() >>>>>>> >>>>>>> code. Instead, you would need to add a signal handler. I would >>>>>>>> suggest >>>>>>>> using System.Inotify, it should work as documented and is much more >>>>>>>> flexible. >>>>>>>> >>>>>>>> So, no, you are not doing anything wrong. notify() is not documented >>>>>>>> correctly and should probably be removed completely. >>>>>>>> >>>>>>>> Arne >>>>>>>> >>>>>>>> >>>>>>>> On Tue, 23 Sep 2014, Pontus éç«stlund wrote: >>>>>>>> >>>>>>>> Hello! >>>>>>>> >>>>>>>> >>>>>>>> I have a question about the notify method in Stdio.File which I >>>>>>>>> can't >>>>>>>>> get >>>>>>>>> to work. Maybe I'm using it wrong or maybe it just doesn't work, I >>>>>>>>> don't >>>>>>>>> know. >>>>>>>>> >>>>>>>>> I'd like to listen for changes in a directory: >>>>>>>>> >>>>>>>>> Stdio.File dir = Stdio.File("/my/dir"); >>>>>>>>> dir->notify( >>>>>>>>> Stdio.DN_MULTISHOT | >>>>>>>>> Stdio.DN_MODIFY | >>>>>>>>> Stdio.DN_CREATE | >>>>>>>>> Stdio.DN_DELETE | >>>>>>>>> Stdio.DN_RENAME, >>>>>>>>> lambda() { >>>>>>>>> werror("Hello\n"); >>>>>>>>> } >>>>>>>>> ); >>>>>>>>> >>>>>>>>> but nothing seems to happen. Am I doing something wrong? >>>>>>>>> >>>>>>>>> And yes, I'm using Linux. >>>>>>>>> >>>>>>>>> Regards >>>>>>>>> # Pontus >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >