3 votes

FSEventStream: Que fait le drapeau kFSEventStreamCreateFlagIgnoreSelf ?

Je surveille les changements du système de fichiers dans un répertoire spécifique en utilisant le OSX FSEventStream. Je regardais la documentation ici et j'ai trouvé un drapeau intéressant décrit, kFSEventStreamCreateFlagIgnoreSelf.

Selon la documentation, en utilisant ce drapeau, le framework FSEvents ne vous notifiera pas des "événements déclenchés par le processus actuel".

Cela semble génial. C'est exactement ce que je veux, mais en pratique, j'ai constaté que je reçois encore des événements déclenchés par le processus actuel.

Dans mes tests limités, si le processus de surveillance crée un nouveau fichier, ou renomme un fichier existant, un événement est toujours déclenché. Alors qu'au moins certaines modifications de fichiers existants ne déclenchent pas d'événements.

En me basant sur la documentation limitée (et le nom du drapeau), je ne m'attends PAS à ce que des événements soient déclenchés par le processus actuel.

Ma question est donc double : -- Est-ce un comportement attendu ? J'ai peur de compter sur le comportement tel qu'il existe actuellement, qu'il pourrait être involontaire et qu'il pourrait changer à l'avenir.

Deuxièmement : -- Si c'est le cas, est-ce que quelqu'un sait quels événements je peux encore attendre de recevoir en utilisant ce drapeau.

3voto

hvanbrug Points 500

J'ai remarqué que lorsque j'utilise ce drapeau, les modifications de fichier que je fais dans mon processus ne me sont pas envoyées en tant qu'événements. Si je ne reçois aucun événement externe par la suite, mon dernier eventId enregistré (à utiliser lorsque je crée le flux la prochaine fois) sera antérieur aux événements que je n'ai pas reçus, je verrai donc ces événements la prochaine fois que je commencerai mon processus, dans le journal d'historique des événements.

Je suis désolé si cela ne répond pas vraiment à la question, mais c'est quelque chose que j'ai observé et qui pourrait aider à expliquer ce que vous voyez.

2voto

osxdirk Points 168

J'ai également observé aucun effet en définissant le drapeau kFSEventStreamCreateFlagIgnoreSelf.

Cependant, en définissant à la fois les drapeaux kFSEventStreamCreateFlagMarkSelf et kFSEventStreamCreateFlagIgnoreSelf (en utilisant le OU bit à bit (|)), cela a fonctionné pour moi. Je ne reçois plus de notifications concernant les fichiers (dans mon cas, des documents) enregistrés par mon application.

kFSEventStreamCreateFlagMarkSelf est disponible depuis OS X 10.9.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X