Como gravar dados em LOG usando C? [RESOLVIDO]

1. Como gravar dados em LOG usando C? [RESOLVIDO]

Bruno R.
brun_ri

(usa Ubuntu)

Enviado em 14/09/2015 - 15:45h

Preciso gravar os resultados que aparecem na tela em um arquivo de log usando C, mas não faço ideia de como fazer isso..

já fiz um código para executar os comandos .. agora preciso pegar os comandos gerados pelo system() e gravar eles em um arquivo de log.

#include <unistd.h>
#include <stdio.h>
#include <stdli.h>
#include <sys/types.h>

int main(){

char entrada[80]
while(!(strcmp(entrada,"exit")==0)){
printf("Digite a entrada:");
scanf("%s", entrada);
if(strcmp(entrada,"exit"==0){
exit(0);
}else{
system(entrada);
}
}
return 0;
}


alguém pode dar alguma dica?



  


2. Re: Como gravar dados em LOG usando C? [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 14/09/2015 - 18:17h

Você executa o comando em questão com a saída redirecionada para um pipe consumido pela sua aplicação. A sua aplicação grava os dados recebidos num arquivo e envia cópia para a tela.


3. .

Bruno R.
brun_ri

(usa Ubuntu)

Enviado em 16/09/2015 - 15:15h

Encontrei um exemplo de uso de pipe e apliquei ao meu código, o problema é que ele entra em um loop infinito .. não consigo achar o erro..o.O

olha só

#include <unistd.h>
#include <stdio.h>
#include <stdli.h>
#include <sys/types.h>

int funcao_pipe( char entrada[80])
{
int p[2], backup;
char buf[1000];

backup = dup(1);
close(0);
close(1);

pipe(p);
system (entrada);
dup2(backup, 1);

printf("O system gerou os dados:\n");
while (fgets(buf, 1000, stdin)){
printf("%s", buf);
}
}

int main(){

char entrada[80]
while(!(strcmp(entrada,"exit")==0)){
printf("Digite a entrada:");
scanf("%s", entrada);
if(strcmp(entrada,"exit"==0){
exit(0);
}else{
funcao_pipe(entrada);
}
}
return 0;
}





4. Re: Como gravar dados em LOG usando C? [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 16/09/2015 - 16:14h

Esse programa não faz sentido. Você está fazendo uma confusão danada com os descritores de arquivo.

A ideia mais comum de um pipe é ter a ponta que lê em um processo e a ponta que escreve em outro. Não é isso que você está fazendo.

O que você quer provavelmente se resolve com popen(). Leia a respeito.


5. Re: Como gravar dados em LOG usando C? [RESOLVIDO]

Bruno R.
brun_ri

(usa Ubuntu)

Enviado em 16/09/2015 - 23:53h

Desculpe a confusão .. é que sou novo em C .. -_-"
Mas estou achando o caminho.. Deu certo usando o popen().

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>

int pipe_log(char comando[80]){

char buf[1000];
FILE *arq;
extern FILE *popen();

if(!(arq = popen(comando,"r"))){
exit(1);
}
while(fgets(buf,sizeof(buf),arq)!=NULL){
printf("%s",buf);
}
pclose(arq);
}

int main(){

char comando[80];

while(!(strcmp(comando,"exit")==0)){
printf("\nDigite o comando que deseja executar:");
scanf("%s",comando);
if (strcmp(comando,"exit")==0){
exit(0);
}else{
pipe_log(comando);
}
}
return 0;
}



Muito Obrigado pela dica do popen() .. me ajudou MUITO!
Agora só preciso gravar os dados em um arquivo de log.

alguma indicação?


6. Re: Como gravar dados em LOG usando C?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 17/09/2015 - 14:01h

As sugestões dadas até agora são suficientes.


7. Consegui Finalizar

Bruno R.
brun_ri

(usa Ubuntu)

Enviado em 22/09/2015 - 19:37h

Consegui terminar a uns dias atrás, e vim fechar o post kkk

para criação dos processos utilizei o popen() como o amigo acima me recomendou.

Já para escrever em arquivo de log utilizei o fopen()...

No fim das contas ficou assim ..

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>

int pipe_log(char entrada[80]){

char url[]= "log.txt";
char buf[1000];
FILE *pro;
FILE *arq;
extern FILE *popen();

if(!(processo = popen(entrada,"r"))){
exit(1);
}

arq = fopen(url,"a");
while(fgets(buf,sizeof(buf),pro)!=NULL){
printf("%s",buf);
fprintf(arq,"%s",buf);
}
fclose(arq);
pclose(pro);
}

int main(){

char entrada[80];

while(!(strcmp(entrada,"exit")==0)){
printf("\nDigite o comando que deseja executar:");
scanf("%s",entrada);
if (strcmp(entrada,"exit")==0){
exit(0);
}else{
pipe_log(entrada);
}
}
return 0;
}






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts