Ha como passar uma variavel para um programa C por meio do shell script? [RESOLVIDO]

1. Ha como passar uma variavel para um programa C por meio do shell script? [RESOLVIDO]

Danny Shaw
InicianteShell

(usa Outra)

Enviado em 01/04/2016 - 19:53h

Boa noite galera!!!


Uma pergunta que me surgiu ontem pessoal, primeiro vou explicar a situacao e ai faco a pergunta propriamente dita: Capturar dados de arquivos txt pelo shell script e bem mais simples e eficiente que com C, ja estudei bem as funcoes de C para leitura , edicao , escrita em arquivos txt em C. Tenho alguns problemas no tratamento ,as vezes os dados ficam meio malucos , enfim sempre da uma caca em alguns dados quando capturo via C. Com shell Script se tornou bem mais facil e simples, porem shellscript so trabalha com inteiros e isso me atrapalha em algumas aplicacoes. Uso mysql para armazenamento de dados mas para algumas aplicacoes uso processo iterativo para se chegar ao resultado desejado e isso em C e perfeito. Minha pergunta e: Posso eu fazer a captura desses dados via shell script e fazer com que o mesmo script passes esses valores para um programa C e o mesmo faz as contas necessarias e retorna para o script ? Abaixo coloco um pequeno exemplo do que quero:

#!/bin/bash

while read linha; do

variavel1=$(echo linha | cut -c 2-6)
variavel2=$(echo linha | cut -c 10-15)
Ai aqui seria coloca o comando que envia os valores para o codigo em C
gcc prog.c -o prog #aqui seria compilado o codigo C
./prog # aqui rodaria o programa que gravaria o resultado em um txt
done

Bom e isso pessoal , minha duvida, e possivel isso? Desde ja agradeco a atencao galera!!!






  


2. Re: Ha como passar uma variavel para um programa C por meio do shell script?

Perfil removido
removido

(usa Nenhuma)

Enviado em 01/04/2016 - 20:37h

Cara, tu pode passar os valores capturados pelo shell script para o programa em C através do array argv, na função main. E para retornar os valores, use simplesmente o printf em C para imprimir os valores na tela, no shell script tu pode capturar esses valores da seguinte forma:

var=$(programaC "valor1" "valor2")


Dessa forma, $var receberá o valor impresso através do printf.
valor1 e valor2 são os dados capturados que você quer passar para o programa feito em C.

EDIT: para trabalhar com operações aritméticas de forma eficaz em shell script, tu pode testar o comando bc. Dê uma pesquisada sobre.
--
LinuxCounter: #596371


3. Re: Ha como passar uma variavel para um programa C por meio do shell script? [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 01/04/2016 - 20:40h

InicianteShell escreveu:

Boa noite galera!!!


Uma pergunta que me surgiu ontem pessoal, primeiro vou explicar a situacao e ai faco a pergunta propriamente dita: Capturar dados de arquivos txt pelo shell script e bem mais simples e eficiente que com C,


Mais simples, pode ser. Mais eficiente, não, a não ser que você esteja falando da sua eficiência pessoal ao programar, em lugar de referir-se à eficiência do código executado. Ou então você precisa estudar mais C.

ja estudei bem as funcoes de C para leitura , edicao , escrita em arquivos txt em C. Tenho alguns problemas no tratamento ,as vezes os dados ficam meio malucos , enfim sempre da uma caca em alguns dados quando capturo via C.


Dado que o próprio shell é escrito em C, você há de convir que não é culpa do C. Convém você estudar mais C.

Com shell Script se tornou bem mais facil e simples, porem shellscript so trabalha com inteiros e isso me atrapalha em algumas aplicacoes. Uso mysql para armazenamento de dados mas para algumas aplicacoes uso processo iterativo para se chegar ao resultado desejado e isso em C e perfeito.


Terminou a introdução e vai começar outro assunto. Aqui cabe um parágrafo.

Minha pergunta e: Posso eu fazer a captura desses dados via shell script e fazer com que o mesmo script passes esses valores para um programa C e o mesmo faz as contas necessarias e retorna para o script ?


Pode. Mas tem certeza de que você quer isso?

Existem ferramentas mais adequadas do que o shell tanto para trabalhar com texto quanto para usar processamento numérico. Entre elas estão awk (que é uma linguagem de programação completa, não precisa do shell para dirigi-la) e perl (outra linguagem de scripts, com ferramentas de processamento de texto e produção de relatórios extremamente poderosas). Existe também o ksh93, que é um shell semelhante ao Bash em termos de sintaxe, mas que possui suporte a números de ponto flutuante (na verdade, o Bash é que é inspirado no ksh original, também conhecido como ksh88).

E, claro, existe a possibilidade de usar C, ou mesmo C++ (cujo suporte a strings é significativamente melhor que o do C).

Abaixo coloco um pequeno exemplo do que quero:

#!/bin/bash

while read linha; do

variavel1=$(echo linha | cut -c 2-6)
variavel2=$(echo linha | cut -c 10-15)
Ai aqui seria coloca o comando que envia os valores para o codigo em C
gcc prog.c -o prog #aqui seria compilado o codigo C
./prog # aqui rodaria o programa que gravaria o resultado em um txt
done


Para que compilar toda hora? Compile uma vez e passe os argumentos pela linha de comando. Além disso, a forma de retornar o valor ao shell provavelmente envolveria execução numa forma parecida com o seguinte (parecida, por sinal, com as chamadas externas que você fez a cut).

resultado=$(prog $variavel1 $variavel2) 


Ainda sobre o código acima, como você está usando Bash, as chamadas a cut são ineficientes e desnecessárias. Você pode conseguir o mesmo efeito usando apenas substituições do shell puro.

variavel1=${linha:1:5}   # posição inicial (começa em 0) e tamanho, logo 5 caracteres a partir do 2º
variavel2=${linha:9:6} # 6 caracteres a partir do 10º



4. Agradecimento.

Danny Shaw
InicianteShell

(usa Outra)

Enviado em 04/04/2016 - 17:29h

Pessoal , muito obrigado pelas duas respostas!!! Abriram novos horizontes, novas possibilidades de solucao , muito obrigado mesmo!!!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts