Executando um arquivo .C dentro do script .SH

1. Executando um arquivo .C dentro do script .SH

Mirela Athayde
milucy95

(usa Debian)

Enviado em 01/02/2016 - 10:03h

Eu tenho um arquivo .sh e .c, quero que o meu script em sh dentro dele execute o meu arquivo em c. É um relatório de acesso que usa também o zenity para interface.
Gostaria de saber como que faço para executar dentro do sh o c. Já usei gcc -c e gcc -o e aparecem mensagens do tipo diretórios não encontrados ou permissão negada. Alguém pode me ajudar ?

SCRIPT .sh

#!/bin/bash

#criando arquivo para armazenar informação do usuário pesquisado
touch ./RELATORIO/ResultUsuario.txt

#janela pedindo o nome de login do usuario
usuario=$(zenity --entry --title="Busca pelo login" --text="Digite o login do usuário" --entry-text="login")

#busca por TODAS as informações do usuário e armazenando informação no arquivo criado
grep -R -i $usuario ./RELATORIO/teste.log >> ./RELATORIO/ResultUsuario.txt

#AQUI DEVE SER FEITA A EXECUÇÃO DO ARQUIVO EM .C , QUE VAI FILTRAR A INFORMAÇÃO DO USUÁRIO

#janela exibindo o resultado da pesquisa já filtrada
zenity --info --text= #RESULTADO DO ARQUIVO EM C


#limpa o arquivo para uma nova pesquisa
> ./RELATORIO/ResultUsuario.txt


E esse é o arquivo .C

#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *arquivo = fopen("../RELATORIO/ResultUsuario.txt", "r");
int caractere; // caractere a ser lido

// string a ser pesquisada
char pesquisa[] = "srcip";

// posicao de início da pesquisa
int pos = 0;
// status da pesquisa
int encontrei = 0;

// testa se o arquivo foi aberto com sucesso
if(arquivo != NULL){
// vamos usar um laço para ler o conteúdo do arquivo
// um caractere de cada vez
while((caractere = fgetc(arquivo)) != EOF){
// vamos verificar se o caractere atual se iguala ao
// primeiro caractere da string a ser pesquisada
if((caractere == pesquisa[0]) && (!encontrei)){
encontrei = 1; // podemos continuar a pesquisa a partir daqui
pos = 0;
}

if(encontrei){
if(caractere == pesquisa[pos]){
encontrei = 1; // continua a pesquisa
pos++; // incrementa a posição de busca

if(pos == strlen(pesquisa))
break;
}
else{
encontrei = 0;
}
}
}

fclose(arquivo); // libera o ponteiro para o arquivo
}
else
printf("Nao foi possivel abrir o arquivo.");

if(encontrei){
printf("A string pesquisada existe no arquivo");
}
else{
printf("A string pesquisada NAO existe no arquivo");
}


  


2. Re: Executando um arquivo .C dentro do script .SH

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 01/02/2016 - 10:40h

Olá!

Gostaria de saber qual o motivo de utilizar as 2 linguagens em paralelo. Porquê não utilizar só Shell Script ou só C. É possível fazer com as duas.

Se tiver dúvidas de como fazer em C ou em Shell só pedir. Todos gostarão de lhe ajudar. Mas não entregar código pronto, como muitos pedem [não sei se é o seu caso].

Não é possível usar a saída de um programa para outro [acredite, eu também já quis quando estava "migrando" para C]. Existem alternativas, tipo, escrever a saída do programa em C em um arquivo e depois ler no Shell, mas aí já entra na área de gambiarras e eu não gosto mais de gambiarras. [Gambiarras só trazem problemas no futuro, tenho certeza!]

Seu programa possui vários erros. Se quiser posso explicar, mas como falei anteriormente, recomendo fazer em uma linguagem só.

Espero ter ajudado

[]'s

T+

--

Att,

Thiago Henrique Hüpner

(Mensagem scaneada pelo antivírus........ops! não precisa, afinal eu uso Linux!)



3. Re: Executando um arquivo .C dentro do script .SH

Mirela Athayde
milucy95

(usa Debian)

Enviado em 01/02/2016 - 10:52h

Thiago eu não pedi código pronto, aliás eu já estou quase com o programa todo pronto e só falta esse detalhe. Estou usando o C porque não consegui filtrar uma solução da forma que eu queria com o grep no linux e uma solução que meu chefe sugeriu foi fazer em C e como ele é uma pessoa formada estou seguindo o que ele disse.
Não vejo os erros no meu programa, conforme forem aparecendo eu irei corrigir ,mas sinta-se avontade se quiser falar ou não.
Obrigada.


4. Re: Executando um arquivo .C dentro do script .SH

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 01/02/2016 - 11:41h

Olá, meu intuito não foi ser rude quando falei sobre pedir o código. Se reler verá que alterei para não parecer "grosseiro".

Bom, vou comentar a respeito de algumas coisas:

1° Utilize sempre as tags [code] [/code] para manter a identação e facilitar a leitura/cópia do código.

2° No seu script, recomendo fazer verificações para saber se o arquivo/pasta existe(m).
Exemplo:


# Se não existir "RELATORIO" (independente se for arquivo ou pasta)
if [ ! -e RELATORIO ]; then
# Crie o diretorio
mkdir RELATORIO
fi


3° Creio que utilizar ./ nesses casos trará erros. O correto seria fazer RELATORIO/teste.log, por exemplo.

[Vamos para o arquivo .c para continuar]

4°Não é utilizado o ../ aqui também.

5° Não sei se "srcip" deverá mudar, mas eu implementei algo simples caso seja para mudar:


if(argc != 2){
printf("USAGE: %s palavraASerPesquisada\n",argv[0]);
exit(1);
}

char *pesquisa = argv[1];


Assim, deverá abrir o arquivo assim ./nomeDoPrograma palavra

Voltando ao .sh

6° Você pode fazer isso: ./nomeDoPrograma "$usuario" 1> log.txt Para pesquisar a palavra e colocar o resultado da pesquisa no arquivo log




#Abre o arquivo que possui o resultado e guarda o resultado na variavel
var=$(cat log.txt)
#Mostra o conteúdo da variável
zenity --info --text="$var"


Aqui nos meus exemplos funcionaram, mas não sei como é o que você deseja, nem o que possui os arquivos. Foi o que consegui entender utilizando suas informações.

Espero ter ajudado

[]'s

T+

--

Att,

Thiago Henrique Hüpner

(Mensagem scaneada pelo antivírus........ops! não precisa, afinal eu uso Linux!)



5. Re: Executando um arquivo .C dentro do script .SH

Paulo
paulo1205

(usa Ubuntu)

Enviado em 02/02/2016 - 03:07h

O programa que você quer fazer em C é essencialmente um grep (mais precisamente fgrep). Não sei por que você está reinventando essa roda.

Da forma como estão o script e o bloco de código em C, parece-me que você quer fazer tão somente o seguinte.

fgrep -R -i "$usuario" ./RELATORIO/teste.log | fgrep -q "srcip" && echo "A string pesquisada existe no arquivo" || echo "A string pesquisada NAO existe no arquivo" 







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts