• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

n3lThon

[Resolvido] Enviar instruções para outro ficheiro executável.

13 mensagens neste tópico

Estou a tentar desenvolver um programa para converter vídeos usando o  ffmpeg. Estou a tentar usar o fopen, mas não consigo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Explica melhor o teu procedimento e posta o código para o pessoal te poder ajudar porque assim, sinceramente, não consigo identificar o teu problema/ a tua dúvida.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou a tentar desenvolver um programa para converter vídeos usando o  ffmpeg. Estou a tentar usar o fopen, mas não consigo.

Eu já usei o fopen várias vezes e sempre funcionou... :-)

JJ

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu consigo usar com ficheiros de texto na boa, agora queria enviar instruções para o ffmpeg, mas até agora não tem resultado.

fopen("ffmpeg.exe -i file.wav converte.mp3", "r");/*OU*/
fopen("ffmpeg.exe -i file.wav converte.mp3", "w");

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O 1º parâmetro do fopen é o nome de um ficheiro. Aí parece-me que estão 3...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
O 1º parâmetro do fopen é o nome de um ficheiro. Aí parece-me que estão 3...

Técnicamente, estão 4... só que o segundo tem um nome um bocado estranho.

Eu consigo usar com ficheiros de texto na boa, agora queria enviar instruções para o ffmpeg, mas até agora não tem resultado.

fopen("ffmpeg.exe -i file.wav converte.mp3", "r");/*OU*/
fopen("ffmpeg.exe -i file.wav converte.mp3", "w");

O fopen serve para abrir ficheiros para os ler ou escrever. Se queres executar um programa, podes de usar a função system():

system("ffmpeg.exe -i file.wav converte.mp3");

Ou, caso estejas em Unix, um par fork()+execve():

if (fork() == 0) {
    /* Chamar execve() aqui dentro (ver manpage). */
}

Ah... e o fopen não considera o PATH (que é apenas um artifício da shell).

Aliás, AFAIK a única maneira que tens de aceder às variáveis de ambiente é através da função getenv().

http://c-faq.com/ansi/envp.html

http://c-faq.com/osdep/system.html

JJ

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Não será o popen que ele quer usar?

Não conhecia essa função, mas atenção à man-page:

---------------------------

CONFORMING TO

      POSIX.1-2001.

---------------------------

Nestes casos, a portabilidade não é uma coisa muito importante (porque mesmo que se use o system(), os próprios comandos mudam de sistema para sistema)...

Mais uma coisa: essas funções não esperam que os processos terminem. No caso de system(), não há maneira "standard" de saber quando termina. No caso do fork()+execve(), é preciso usar a system call wait().

A função popen também não espera, mas se quisermos que tudo funcione normalmente, basta chamar a pclose() logo a seguir (a pclose() espera que o processo termine antes de fechar o "pipe", mais uma vez, com a wait())...

JJ

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É uma função como a "system();" que eu quero. Que execute outro ficheiro e lhe envie-e instruções.

system("ffmpeg.exe -i file.wav converte.mp3");

Isto: " -i file.wav converte.mp3", são as instruções enviadas para o ficheiro que é executado.

Obrigado a todos pela ajuda.  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Isto: " -i file.wav converte.mp3", são as instruções enviadas para o ficheiro que é executado.

"Enviar instruções" dá a impressão de te quereres ligar ao programa por IPC (Inter-process Communication).

Isso de que estás a falar são argumentos de linha de comandos.

JJ

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

"Enviar instruções" dá a impressão de te quereres ligar ao programa por IPC (Inter-process Communication).

Isso de que estás a falar são argumentos de linha de comandos.

JJ

Sim é esse o meu objectivo, criar um programa que envie essas instruções para que o utilizador apenas escolha as opções de conversão.  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Sim é esse o meu objectivo, criar um programa que envie essas instruções para que o utilizador apenas escolha as opções de conversão.  :P

São argumentos. Não são instruções.

JJ

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora