Olá,

  Esqueci de um detalhe, troque o nome de arquivo "/var/log/kdm.log" por 
"/var/log/asterisk/queue_log".


  Abraços.






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

// Número máximo de campos
#define MAX_CAMPOS 10
// Separador entre cada campo
#define DELIMITADOR '|'
// Tamanho máximo da cláusulo SQL Insert (100 kB)
#define MAX_INSERT 102400

// Variáveis para controle de Conexão com o BD
static PGconn *conn;
static PGresult *result;

// Variável que aponta para cada campo encontrada em uma linha
static char* campos[MAX_CAMPOS];
static int campos_lidos;

// Função que faz com que a variável acima tenha os apontamentos corretos
int Apontar_Campos(char *linha){
  char *inicio, *delimitador;
  int campo_atual = 0;
  inicio = linha;
  delimitador = strchr(inicio, DELIMITADOR);
  while (delimitador && campo_atual < MAX_CAMPOS-1){
    *delimitador = '\0';
    campos[campo_atual++] = inicio;
    inicio = delimitador + 1;
    delimitador = strchr(inicio, DELIMITADOR);
  }
  campos[campo_atual++] = inicio;
  return campo_atual;
}

// Lê um arquivo e o coloca na memória
int Por_Arquivo_Memoria(char **memoria){
  FILE *arquivo;
  int tamanho;

  if ((arquivo = fopen("/var/log/asterisk/queue_log", "rt")) == NULL){
    perror("Erro");
    return 0;
  }
  fseek(arquivo, 0, SEEK_END);
  tamanho = ftell(arquivo);
  rewind(arquivo);
  *memoria = (char*)malloc(tamanho + 1);
  fread(*memoria, tamanho, 1, arquivo);
  fclose(arquivo);
  (*memoria)[tamanho] = '\0';
  return 1;
}

// Realiza a conexão com o BD
int Conectar(){
  conn = PQconnectdb("host=localhost "
                     "user=asterisk "
                     "password=asterisk "
                     "dbname=asterisk"
                    );
  if(PQstatus(conn) != CONNECTION_OK) {
    printf("Falha na conexão. Erro: %s", PQerrorMessage(conn));
    PQfinish(conn);
    return 0;
  }
  printf("Conexão com o banco efetuada com sucesso. ");
  return 1;
}

// Insere um registro, com os campos detectados, no DB
int Inserir(int campos_lidos){
  char inserir[MAX_INSERT], *c;
  strncpy(inserir, "Insert Into Queue_Log Values ('", 31);
  c = inserir + 31;
  for (i=0; i<campos_lidos-1; i++){
    printf("Campo %2i: %s\n", i, campos[i]);
    strncpy(c, campos[i], campos[i+1]-campos[i]-1);
    c += campos[i+1]-campos[i]-1;
    strncpy(c, "', '", 4);
  }
  printf("Campo %2i: %s\n", i, campos[i]);
  strcat(c, campos[i]);
  strcat(c, "')");

  printf("\nSQL: %s\n", inserir);
  result = PQexec(conn, inserir);

  if(result) {
    switch(PQresultStatus(result)) {
      case PGRES_EMPTY_QUERY:
        printf("Nenhuma alteracao.\n");
        break;
      case PGRES_FATAL_ERROR:
        printf("Erro na query: %s\n", PQresultErrorMessage(result));
        break;
      case PGRES_COMMAND_OK:
        printf("%s linhas afetadas.\n", PQcmdTuples(result));
        break;
      default:
        printf("Query executada sem retorno.\n");
        break;
    }
  }
  else
    printf("Erro executando query.\n");
}

int main(int argc, char* argv[]){
  char *memoria, *inicio, *delimitador;

  // Se tiver problemas com o arquivo ou com a conexão, termina.
  if (!Por_Arquivo_Memoria(&memoria) || !Conectar())
    return -1;

  inicio = memoria;
  delimitador = strchr(inicio, '\n');
  while (delimitador){
    *delimitador = '\0';
    printf("\n*******************\nLinha: %s\n\n", inicio);
    campos_lidos = Preencher_Campos(inicio);
    // Insere os dados no BD
    Inserir();

    inicio = delimitador + 1;
    delimitador = strchr(inicio, '\n');
  }
  return 0;
}

--
Atenciosamente

           Claudio Polegato Junior

           Engenheiro Autônomo - Ribeirão Preto e Região
           Mestre em Física Aplicada à Medicina e Biologia - USP
           Engenheiro Computacional - USP
           Engenheiro Eletrônico - USP

Um peregrino de problemas; Um pergaminho de soluções!


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

// Número máximo de campos
#define MAX_CAMPOS 10
// Separador entre cada campo
#define DELIMITADOR '|'
// Tamanho máximo da cláusulo SQL Insert (100 kB)
#define MAX_INSERT 102400

// Variáveis para controle de Conexão com o BD
static PGconn *conn;
static PGresult *result;

// Variável que aponta para cada campo encontrada em uma linha
static char* campos[MAX_CAMPOS];
static int campos_lidos;

// Função que faz com que a variável acima tenha os apontamentos corretos
int Apontar_Campos(char *linha){
  char *inicio, *delimitador;
  int campo_atual = 0;
  inicio = linha;
  delimitador = strchr(inicio, DELIMITADOR);
  while (delimitador && campo_atual < MAX_CAMPOS-1){
    *delimitador = '\0';
    campos[campo_atual++] = inicio;
    inicio = delimitador + 1;
    delimitador = strchr(inicio, DELIMITADOR);
  }
  campos[campo_atual++] = inicio;
  return campo_atual;
}

// Lê um arquivo e o coloca na memória
int Por_Arquivo_Memoria(char **memoria){
  FILE *arquivo;
  int tamanho;

  if ((arquivo = fopen("/var/log/asterisk/queue_log", "rt")) == NULL){
    perror("Erro");
    return 0;
  }
  fseek(arquivo, 0, SEEK_END);
  tamanho = ftell(arquivo);
  rewind(arquivo);
  *memoria = (char*)malloc(tamanho + 1);
  fread(*memoria, tamanho, 1, arquivo);
  fclose(arquivo);
  (*memoria)[tamanho] = '\0';
  return 1;
}

// Realiza a conexão com o BD
int Conectar(){
  conn = PQconnectdb("host=localhost "
                     "user=asterisk "
                     "password=asterisk "
                     "dbname=asterisk"
                    );
  if(PQstatus(conn) != CONNECTION_OK) {
    printf("Falha na conexão. Erro: %s", PQerrorMessage(conn));
    PQfinish(conn);
    return 0;
  }
  printf("Conexão com o banco efetuada com sucesso. ");
  return 1;
}

// Insere um registro, com os campos detectados, no DB
int Inserir(int campos_lidos){
  char inserir[MAX_INSERT], *c;
  strncpy(inserir, "Insert Into Queue_Log Values ('", 31);
  c = inserir + 31;
  for (i=0; i<campos_lidos-1; i++){
    printf("Campo %2i: %s\n", i, campos[i]);
    strncpy(c, campos[i], campos[i+1]-campos[i]-1);
    c += campos[i+1]-campos[i]-1;
    strncpy(c, "', '", 4);
  }
  printf("Campo %2i: %s\n", i, campos[i]);
  strcat(c, campos[i]);
  strcat(c, "')");

  printf("\nSQL: %s\n", inserir);
  result = PQexec(conn, inserir);

  if(result) {
    switch(PQresultStatus(result)) {
      case PGRES_EMPTY_QUERY:
        printf("Nenhuma alteracao.\n");
        break;
      case PGRES_FATAL_ERROR:
        printf("Erro na query: %s\n", PQresultErrorMessage(result));
        break;
      case PGRES_COMMAND_OK:
        printf("%s linhas afetadas.\n", PQcmdTuples(result));
        break;
      default:
        printf("Query executada sem retorno.\n");
        break;
    }
  }
  else
    printf("Erro executando query.\n");
}

int main(int argc, char* argv[]){
  char *memoria, *inicio, *delimitador;

  // Se tiver problemas com o arquivo ou com a conexão, termina.
  if (!Por_Arquivo_Memoria(&memoria) || !Conectar())
    return -1;

  inicio = memoria;
  delimitador = strchr(inicio, '\n');
  while (delimitador){
    *delimitador = '\0';
    printf("\n*******************\nLinha: %s\n\n", inicio);
    campos_lidos = Preencher_Campos(inicio);
    // Insere os dados no BD
    Inserir();

    inicio = delimitador + 1;
    delimitador = strchr(inicio, '\n');
  }
  return 0;
}
----------------------------------------
Estação VoIP 2006
5 e 6 Dezembro
Curitiba PR
http://www.estacaovoip.com.br

_______________________________________________
LIsta de discussões AsteriskBrasil.org
[email protected]
http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil

_______________________________________________
Acesse o  wiki AsteriskBrasil.org:
http://www.asteriskbrasil.org

Responder a