hola:
  tengo una duda de tuberias:

  resulta que me encontre un programa en python que controla mplayer en modo 
"slave", osea que recive comandos 
  como pause, seek, quit desde stdin.

  la linea que lanza mplayer:
        self.mplayerIn,self.mplayerOut=os.popen2("mplayer -slave -quiet \"" + 
target + "\" 2>/dev/null")  #open pipe
        fcntl.fcntl(self.mplayerOut, fcntl.F_SETFL, os.O_NONBLOCK)

  para despues mandar comandos con:
        self.mplayerIn.write(command + "\n")
        self.mplayerIn.flush()  #flush pipe

  se me ocurrio probar lo mismo pero en c, lanza mplayer, toca la cancion, 
despues de un tiempo le mando mas 
  comandos pero mplayer los ignora... probe usando FILE* y file-descriptores y 
los resultados son los mismos.
[-----------]
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>

char *seek_txt="seek -1\n";
char *pausa_txt="pause\n";
char *quit_txt="quit\n";

main() {
        FILE *pipe=popen("mplayer -slave -quiet 
\"/home/rod/musica/mi-cancion.mp3\" 2>/dev/null","w");
        if (pipe==NULL) {
                printf("no se pudo\n");
                return;
        }
        fcntl(fileno(pipe),F_SETFL,O_NONBLOCK);
        
        printf("seek...\n");
        //fprintf(pipe,"seek -1");
        fwrite(seek_txt,sizeof(char),strlen(seek_txt),pipe);
        fflush(pipe);
        
        printf("sleep...\n");
        sleep(6);
        
        printf("pausa...\n");
        //fprintf(pipe,"pause");
        fwrite(pausa_txt,sizeof(char),strlen(pausa_txt),pipe);
        fflush(pipe);
        
        printf("quit...\n");
        //fprintf(pipe,"quit");
        fwrite(quit_txt,sizeof(char),strlen(quit_txt),pipe);
        fflush(pipe);
        
        fclose(pipe);
        printf("listo\n");
}
[-----]

    me falta algo? alguien sabe que cosas hace popen2 de python aparte de hacer 
popen?
    gracias.

Responder a