[C linux] Envoyer une sequence clavier a un procesus

Envoyer une sequence clavier a un procesus [C linux] - C - Programmation

Marsh Posté le 23-02-2005 à 13:57:28    

Je cherche a simuler l'entrée clavier ou une sequence de touches pour communiquer avec un processus.
 
Ex: simuler la touche "x" à XMMS pour lancer la lecture.
 
Mon application possède déjà le pid du processus avec lequel je veux communiquer, je sais lui envoyer un signal a l'aide de la procedure "kill" mais je ne sais pas lui envoyer une sequence de touches.
 
Merci.

Reply

Marsh Posté le 23-02-2005 à 13:57:28   

Reply

Marsh Posté le 23-02-2005 à 16:56:33    

pour lui envoyé des données, tu as plusieurs possibilités
 
- les filles de messages
- les mémoires partagées
- les sémaphores
- le réseau

Reply

Marsh Posté le 24-02-2005 à 08:58:44    

2 possibilités:
1) le process auquel tu veux envoyer les commandes est externe  à ton programme: la solution que je vois consiste à rediriger l'entrée standard du programme dans un tube nommé (man 1 mkfifo). Exemple:
$ mkfifo /tmp/comm_with_xmms.fifo
$ xmms < /tmp/comm_with_xmms.fifo &
$ mon_programme /tmp/comm_with_xmms.fifo  
 
mon_programme ouvre le fifo /tmp/comm_with_xmms.fifo en écriture et y balance les commandes
 
2) mon_programme  lance un fils (suite à un fork, pthread, etc.) le père balance les commandes par un moyen de comm... le fils redirige (man 2 dup ou man 2 dup2) son entrée standard depuis le moyen de comm et lance le programme  
 
 
 
 
Dernier point: en théorie, au lancement d'un processus, le système alloue au processus 3 flux: stdin, stdout, stderr... En connaissant le pid du processes, tu dois pouvoir retrouver les flux associés au pid... Mais je ne sais pas comment (fouiller dans /proc?) et si c'est vraiment possible...
Bonne courage

Reply

Marsh Posté le 24-02-2005 à 09:16:37    

moi23372 a écrit :

pour lui envoyé des données, tu as plusieurs possibilités
 
- les filles de messages
- les mémoires partagées
- les sémaphores
- le réseau


Filles? tu voulais dire files ou pipes ou tubes?
Sémaphones ne permettent pas la communication, ces sont les mecanismes de synchronisation... la mémoire partagée+un sémaphore peut être utilisé comme un mécanisme de communication...
Réseaux? tu veux surement parler des sockets?

Reply

Marsh Posté le 24-02-2005 à 16:47:22    

oui bien sure files de messages... Une file de message n'est pas un pipe(tube). c'est vraiment qu'on pourrait utilisé un pipe dans ce cas-ci...
 
en réfléchissant bien, le crois que la solution avec les pipes et le redirection est peut être une bonne solution pour cela...
 
oui pour utilisés le sémaphore, c'est bien sure obligé d'utilisé la shared memory...
 
sinon pour le réseau, les sockets ;-)

Reply

Marsh Posté le 24-02-2005 à 22:50:51    

Moi aussi je suis interré par ceci, mais j'ai longement esseyé
et je n'y arrive pas, j'y vais à cout de fork, pipe, open, write ...
mais j'ai aucun résultat.
Je cherche un exemple très simple qui lance un editeur de texte (emacs
par exemple) et qui après un petit sleep ecrit dedans par communication à travers
une file de message.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed