[AsteriskBrasil] Script AGI em C

Diego Aguirre dag.voip em oi.com.br
Segunda Maio 22 11:31:24 BRT 2006


Já tentou executar um strip no binário gerado???

# strip executavel.agi

veja o que acontece!!!

Diego Aguirre
Infodag - Informática
FWD#: 459696
Nikotel#: 99 21 8138-2710
EnumLookup#: +55 21 8138-2710
DUNDi-br#: 21 8138-2710


cleviton.araujo em caixa.gov.br escreveu:
> Pessoal:
> 
> Usei aquele exemplo de script AGI em C da web, só para perceber o funcionamento com o Asterisk. Compilei e funcionou beleza.
> Executando um ls -l acidental no diretório onde estava o fonte e executável fiquei supreendido que o executável ficou com o tamanho mais de 20 vezes maior que o fonte.
> 
> Executei o comando gcc -Os fonte.c -o executavel.agi várias vezes, com flags de otimização diferentes. Máximo que consegui reduzir o tamanho do executável foi para 17 vezes.
> 
> O tamanho do fonte cheio de comentário é 448 Bytes;
> O executável ficou em 7315 Bytes. (o máximo que conseguir reduzir)
> 
> Eu esperava que o tamanho do executável ficasse na ordem de grandeza do próprio fonte, já que os comentários são extensos.
> 
> Alguém consegue explicar o porque disso?
> Esse overhead se deve a linkagem com o sistema operacional? porque da stdio.h o script só usa quatro funções. Fica parecendo que o compilador incluir todas as funções de stdio.h e as compila.
> Gostaria que alguém da lista dirimisse minha dúvida.
> 
> Cléviton.
> 
> 
> 
> 
> Só documentar abaixo está o pedaço de script do site: http://home.cogeco.ca/~camstuff/agi.html
> /* PEQUENO PEDAÇO DE SCRIPT EM C PARA INTERFACE AGI DO ASTERISK */
> //
> /* A liguagem C funciona perfeito com o Asterisk mas você deve usar o comando 'setlinebuf' sobre a saída padrão (stdout) e a saída 
> de erro padrão (stderr). Isso faz com que a bafferização aconteça de uma linha de cada vez (diferente do uso de um buffer extenso). 
> Se você NÃO fizer isso sobre a sua saída padrão (stdout) então seu script vai desligar enquanto o Asterisk fica aguardando por um 
> comando no caso do buffer (extenso) ainda não ficar cheio. Um script AGI mínimo em C se parece com isso: */
> //
> #include <stdio.h>
> main() {
> char line[80];
> //
> /* Usa a bafferização de linha */
> setlinebuf(stdout);
> setlinebuf(stderr);
> //
>    /* Lê e ignora o ambiente AGI */
>       while (1) {
>            fgets(line,80,stdin);
>            if (strlen(line) <= 1) break;
>        }
> //
> /* Envia ao Asterisk um comando - o comando SAY NUMBER */
> printf("SAY NUMBER 123 \"\"\n");
> //
> /* Lê a resposta do Asterisk e mostra na Console */
> fgets(line,80,stdin);
> fputs(line,stderr);
> }
> 
> _______________________________________________
> LIsta de discussões AsteriskBrasil.org
> AsteriskBrasil em listas.asteriskbrasil.org
> http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil
> 
> _______________________________________________
> Acesse o  wiki AsteriskBrasil.org:
> http://www.asteriskbrasil.org
> 
> 


Mais detalhes sobre a lista de discussão AsteriskBrasil