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
où 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