Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno SR

Combinação de PIPE e arquivo ?

Recommended Posts

Boa tarde pessoal! Sou iniciante em C e estou com uma grande dúvida em um projeto da facudade...

 

preciso fazer um interpretador de comandos que além de imprimir na tela comandos simples, armazene o que aparece na tela em um arquivo de log.

 

O meu código até o momento é o seguinte

 

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

int pipe_log(char comando[80]){

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

if(!(arq = popen(comando,"r"))){
exit(1);
}
printf("O system gerou os dados:\n");
while(fgets(buf,sizeof(buf),arq)!=NULL){
printf("%s",buf);
}

arq = fopen(url,"w");
fprintf(arq,"%s",buf); // estas tres linhas foram uma tentativa frustrada escrever os dados do buf em um arquivo, antes de fechar o popen();
fclose(arq);//fecha o arquivo

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;
}

 

Preciso salvar o que aparece na tela também em um arquivo de log.. algém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por fernandomullerjr
      Oi Pessoal,
      bom dia.
      Estou tentando obter os logs do Laravel através do stdout do meu Container PHP, mas quando eu simulo um erro dentro do Container via php artisan ele não é mostrado no stdout do container:
      ``` 
      fernando@c64d676157c2:/var/www$ php artisan command5
      Command "command5" is not defined.  
      fernando@c64d676157c2:/var/www$ 
      ```
      O erro é escrito no log do Laravel:
      ``` 
      fernando@c64d676157c2:/var/www$ tail storage/logs/laravel.log
      "} 
      [2022-02-22 12:43:52] dev.ERROR: Command "command5" is not defined. {"exception":"[object] (Symfony\\Component\\Console\\Exception\\CommandNotFoundException(code: 0): Command \"command5\" is not defined. at /var/www/vendor/symfony/console/Application.php:644)
      [stacktrace]
      #0 /var/www/vendor/symfony/console/Application.php(228): Symfony\\Component\\Console\\Application->find('command5')
      #1 /var/www/vendor/symfony/console/Application.php(140): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
      #2 /var/www/vendor/laravel/framework/src/Illuminate/Console/Application.php(93): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
      #3 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
      #4 /var/www/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
      #5 {main}
      "} 
      fernando@c64d676157c2:/var/www$ 
      ```

      Mas o erro não é mostrado no stdout do Container PHP:
      ``` 
      fernando@notebookdell-1487   /lab/treinamento/travellist-laravel-demo     main   docker logs -f travellist-app                                                               SIGINT(2) ↵  10345  09:44:30  
      [22-Feb-2022 12:40:57] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
      [22-Feb-2022 12:40:57] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
      [22-Feb-2022 12:40:57] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
      [22-Feb-2022 12:40:57] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
      [22-Feb-2022 12:40:57] NOTICE: fpm is running, pid 1
      [22-Feb-2022 12:40:57] NOTICE: ready to handle connections
      ```
      Eu tentei diversas combinações de configurações do php.ini file, config/logging.php, LOG_CHANNEL  do ".env",  diversas opções de configuração do stack e muito mais.
      Eu estou usando o PHP na versão 7.4.28.
      laravel/framework v7.11.0
      Composer version 2.2.6
      **O projeto foi clonado do Github:**
      https://github.com/do-community/travellist-laravel-demo

      Todos os containers estão up e rodando conforme o esperado:
      ```
      fernando@notebookdell-1487   /lab/treinamento/travellist-laravel-demo     main   docker container ls                                                                                     10344  09:40:58  
      CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                   NAMES
      c64d676157c2   travellist     "docker-php-entrypoi…"   5 seconds ago   Up 3 seconds   9000/tcp                                travellist-app
      2995a82595f7   mysql:5.7      "docker-entrypoint.s…"   5 seconds ago   Up 3 seconds   3306/tcp, 33060/tcp                     travellist-db
      736ede87e337   nginx:alpine   "/docker-entrypoint.…"   5 seconds ago   Up 3 seconds   0.0.0.0:8000->80/tcp, :::8000->80/tcp   travellist-nginx
       fernando@notebookdell-1487   /lab/treinamento/travellist-laravel-demo     main                                                                                                           10345  09:41:01  
      ```

      Como eu posso obter os logs do Laravel através do stdout do meu container no Docker?
    • Por mateus.andriollo
      Gostaria de saber se alguém tem uma trigger para fazer log de qualquer tipo de transação de dados em qualquer tabela do banco. Porém, preciso carregar um campo UserName que será setado a cada conexão via login php
      SET @UserName = 'ZeBala' Achei vários exemplos porém tenho q criar um trigger para cada tabela
       
      CREATE TRIGGER roles_audit_au AFTER UPDATE ON `<nome_tabela>` Existe uma forma de não ser direcionada?
    • Por Hacker_Buiu
      Neste tutorial que criei você vai aprender a tirar arquivos desnecessários do Windows sem usar programa:
       
      1)Digite Executar na barra de espaço do Windows 10>Depois digite "prefetch" sem as aspas duplas,exclua todos os arquivos de dentro dessa pasta selecionando-os com Control+a.Se aparecer mensagem,assinale todos para a frase "Selecione tudo isso para todos os arquivos atuais" alguma coisa assim,delete/exclua tudo,se pedir para ignorar clique no botão ignorar todos.
      2)Digite Executar de novo>Agora digite "temp" sem as aspas duplas,de novo selecione tudo apertando no teclado control+a.Delete Tudo.Faça o mesmo processo do que o primeiro.
      3)Digite novamente Executar, só que agora,digite "%temp%" sem as aspas duplas,de novo selecione tudo apertando no teclado control+a,Delete tudo ignorando os arquivos,se tiver em algum desses 3 o arquivo vulkan ou nvidia não delete são os únicos primordiais para funcionar a placa de vídeo.Se deletou dá para restaurar na lixeira,por fim esvazie a lixeira para que o Windows fique mais leve.
    • Por juninhogpe
      Boa tarde.
      Estou com problemas ao subir arquivos no formato MP3 com o código abaixo. Sempre usei ele e hoje apenas aparece erro.
      Abaixo o código:
       
      $titulo = $_POST['titulo']; if ($titulo != ""){ $texto = $_POST['texto']; $padre = $_POST['padre']; $data = date("Y-m-d", strtotime($_POST['data'])); $audio = isset($_FILES["audio"]) ? $_FILES["audio"] : FALSE; $arquivo = isset($_FILES["foto"]) ? $_FILES["foto"] : FALSE; if($arquivo && $audio){ if(!preg_match("/^image\/(pjpeg|jpeg|png|gif|bmp)$/", $arquivo["type"])){ echo utf8_encode("<script> alert ('Arquivo em formato inválido! A imagem deve ser jpg, jpeg, bmp, gif ou png. Cadastro não foi realizado.');</script>"); } if(!preg_match("/^audio\/(mp3|MP3)$/", $audio["type"])){ echo utf8_encode("<script> alert ('Arquivo em formato inválido! erro no upload do audio. Cadastro não foi realizado.');</script>"); } else{ preg_match ("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $arquivo["name"], $ext); $dd = date("msdYiH"); $imagem_nome = $dd. "." . $ext[1]; $imagem_dir = "../am/" . $imagem_nome; $up = move_uploaded_file($arquivo["tmp_name"], $imagem_dir); preg_match ("/\.(mp3|MP3|wav|wma){1}$/i", $audio["name"], $ext); $dd = date("msdYiH"); $audio_nome = $dd. "." . $ext[1]; $audio_dir = "../am/" . $audio_nome; $up_audio = move_uploaded_file($audio["tmp_name"], $audio_dir); if ($up){ $sql = utf8_decode("INSERT INTO palavra (titulo, foto, data, audio, texto, padre) VALUES ('$titulo','$imagem_nome', '$data','$audio_nome', '$texto', '$padre')"); } } }else echo utf8_encode("<script> alert ('Erro no upload.');</script>"); if($conn->query($sql) === TRUE){ echo utf8_encode("<script> alert (\"Cadastro realizado com sucesso.\");</script>"); echo utf8_encode('<script>window.location="palavra.php";</script>'); } else{ echo "Erro: " . $sql . "<br />" .$conn->error; echo utf8_encode('<script>window.location="palavra.php";</script>'); } }  
      O que estou fazendo de errado?
      Obrigado.
    • Por Jefferson andre
      Saudações, como eu faço para monitorar o conteúdo de novos arquivos criados em uma determinada pasta?
       
      Motivo: quando se envia um arquivo para a Sefaz ela retorna alguns arquivos sendo o primeiro o mais importante pois o seu conteúdo informa o nome do próximo é assim por diante.
      Agradeço a ajuda e por sugestões
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.