Re: Stdio.File()->notify

Pontus Östlund <[email protected]>
Newsgroups gmane.comp.lang.pike.user
Message-ID <CAAyMhKy4thU35VduMUv9uGDF5AEW8KtouL2HENyn3bA0Z8mgXQ@mail.gmail.com>
*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
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.