2010-04-09 16 views

Répondre

6

Il existe deux façons générales de procéder. L'un est que le fichier en cours d'écriture est en fait un named pipe que le programme est en train de lire, et il reçoit la chaîne "start working" comme tout autre type de flux d'entrée (comme une socket réseau, ou entrée standard).

L'autre (spécifique à Linux) est que le fichier en cours d'écriture est un fichier régulier, et le programme surveille le fichier pour les changements en utilisant inotify (ou dnotify sur les systèmes plus anciens). Lorsqu'il reçoit un événement inotify indiquant que le fichier a changé, il lit son contenu et obtient la chaîne "start working".

Notez que ces deux méthodes nécessitent que le programme en question s'exécute déjà en arrière-plan (et ne fasse rien). Il n'y a vraiment aucun moyen de lancer un programme de cette manière, à moins qu'il n'y ait par exemple un processus d'arrière-plan chargé de lancer des programmes qui font l'une des deux choses ci-dessus.

+0

Merci! Je connaissais les FIFO depuis un certain temps, mais je ne me souvenais pas beaucoup de l'IPC * nix; Je ne savais pas à propos d'inotify. Quelles sont les différences entre les deux méthodes que vous avez décrites? – Yktula

+1

La principale différence est que les FIFO (pipes nommées) sont un flux, et inotify est une interface de système de fichiers. Inotify vous indique quand les fichiers sont créés, modifiés, supprimés et déplacés afin que votre programme puisse répondre de manière appropriée (en répondant par exemple à l'écriture de texte dans un fichier). Ce n'est pas nécessairement * prévu * pour IPC mais peut certainement être utilisé de cette façon. Les canaux nommés sont plus traditionnels et fonctionnent comme le descripteur d'entrée standard ou une socket réseau; vous pouvez 'select()' dessus, et si vous essayez d'en lire quand il n'y a pas de données, l'appel se bloque jusqu'à ce qu'il y en ait. –