Blog C/C++ Dicas Lazarus Shell Script SSC
Criando Pacote de Instalador Debian

Neste artigo apresento como criar o pacote de instalador do Debian, já com interface gráfica.

Chamando o aplicativo através do menu.

Montando o pacote do SSC

Para criar o instalador do SSC, siga os passos abaixo:

  1. Primeiro compile seu binário, no alvo pretendido.
  2. Chame o script ./buildlinux.sh
  3. O pacote estará na pasta ./lin_bin
  4. Instale o pacote para testar rodando:

apt install ssc2_[versao]_[plataforma].deb

Blog C/C++ Mysql Programação Shell Script
Mysql com C/Lazarus/Python/PHP/R – Parte 2

Neste segundo artigo iremos abordar como realizar um crud simples em C usando banco de dados Mysql como referência.

No artigo anterior, tratamos de criar o banco de dados.

http://maurinsoft.com.br/index.php/2022/01/31/mysql-com-c-lazarus-python-php-r-parte-1

Agora iremos tratar de algumas definições do nosso projeto:

Para facilitar o CRUD, iremos dividir em pequenos aplicativos, alias, essa divisão deixa muito didática e fácil de entender.

  • insPessoa.c – Inclui uma pessoa na tabela de pessoas
  • SelPessoa.c – Lista a relação de pessoas
  • UpdPessoa.c – Atualiza os dados de uma pessoa da tabela de pessoa
  • remPessoa.c – Remove uma pessoa da tabela de pessoas

Com isso, finalizamos o crud e teremos alcançado nosso objetivo neste artigo.

Dependências

Iremos incluir aqui as dependências necessárias para seguir com este programa.

Primeiro pedimos para seguir o primeiro tutorial, pois sem a instalação do mysql fica dificil implementar.

Em seguida a instalação do ncurses, conforme o link abaixo:

http://maurinsoft.com.br/index.php/2022/01/31/instalando-ncurses/

GIT do Projeto

Estaremos modificando o git incluindo a pasta gcc, nela incluiremos todos os fontes do projeto.

https://github.com/marcelomaurin/mysql-vs-todos

Inclusão dos fontes dos projetos em C

Começa o Jogo!

Primeiro iremos criar o Makefile


CC=gcc
SOURCE_INS=insPessoa.c
SOURCE_SEL=selPessoa.c
SOURCE_DEL=delPessoa.c
SOURCE_UPD=updPessoa.c

LIBS= -lmysql -lncurses

TARGET_INS=insPessoas
TARGET_SEL=selPessoas
TARGET_DEL=delPessoas
TARGET_UPD=updPessoas


all: clean compile install

clean:
	rm *.o

compile:
	$(CC) $(SOURCE_INS) -o $(TARGET_INS)
	$(CC) $(SOURCE_SEL) -o $(TARGET_SEL)
	$(CC) $(SOURCE_DEL) -o $(TARGET_DEL)
	$(CC) $(SOURCE_UPD) -o $(TARGET_UPD)


install:
	cp $(TARGET_INS) /usr/local/bin/
	cp $(TARGET_SEL) /usr/local/bin/
	cp $(TARGET_DEL) /usr/local/bin/
	cp $(TARGET_UPD) /usr/local/bin/

Ao chamar o make, iremos compilar todos os fontes incluindo eles na pasta /usr/local/bin, que permite executar em qualquer local que quisermos.

Explicação do programa

Este programa irei apresentar na integra, comentando os pontos principais.

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

#define USER "gcc"
#define HOST "localhost"
#define DATABASE "testedb"
#define PASS "123456"


#define SUCCESS 0
#define ERROR 1

MYSQL *mycon;
//char PASS[20];
int res;

int conecta(void){
	mycon = mysql_init(NULL);
	/*
	mysql_real_connect(MYSQL *mysql,
                   const char *host,
                   const char *user,
                   const char *passwd,
                   const char *db,
                   unsigned int port,
                   const char *unix_socket,
                   unsigned long client_flag)
				  */
    //mysql_options(mycon, MYSQL_READ_DEFAULT_FILE, (void *)"./my.cnf");
	res = mysql_real_connect(
				  mycon,
				  HOST,
				  USER,
				  PASS,
				  DATABASE,
				  3306,
				  NULL,
				  0);
	if(res!=NULL)
	{
		printf("Sucesso na conexão com servidor\n");
		return SUCCESS;
	}
	else {
		printf("Falha na conexao! Erro:%s\n",mysql_error(mycon));
		return ERROR;
	}
}

//Estrutura de cadastro de pessoas
typedef struct PESSOAS {
  int idpessoa;
  char nome[30];
  char dtnasc[20];
  char profissao[20];
  char sexo;
} PESSOAS;



void desconecta(void){
   mysql_close(mycon);
   mysql_library_end();
   printf("Desconectado\n");
}

int Select( PESSOAS *pes){
  char sql[500];
  memset(sql,'\0',sizeof(sql));
  sprintf(sql,"select * from pessoas where nome like '%%%s%%'",
       pes->nome
	 );
  printf("SQL:%s\n\n",sql);
  //mysql_prepare(
  res = mysql_query(mycon,sql);
  if(!res) {
	  printf("Pesquisa com sucesso!\n");
	  MYSQL_RES *result = mysql_store_result(mycon);

      if (!result) {
        printf("Couldn't get results set: %s\n", mysql_error(mycon));
      } else {
        MYSQL_ROW row;
        int i;
        unsigned int num_fields = mysql_num_fields(result);

        while ((row = mysql_fetch_row(result))) {
          for (i = 0; i < num_fields; i++) {
            printf("%s, ", row[i]);
          }
          putchar('\n');
        }

        mysql_free_result(result);
	  }

  }  else {
	  printf("Falha na pesquisa Error:%s\n",mysql_error(mycon));
  }
}

void captura_dados(PESSOAS *pes){
	printf("Digite as informações que deseja pesquisar\n");
	printf("==========================================\n");
	printf("\nNome:");
	scanf("%s",pes->nome);
	printf("\n\n");
}

void Wellcome(void){
   printf("Software selPessoa\n");
   printf("Criado por Marcelo Maurin Martins\n");
   printf("Maurinsoft.com.br\n");
   //printf("Senha do banco:");
   //scanf("%s",PASS);
}

//funcao principal
void main(int argc, char *argv[]){
   Wellcome();
   PESSOAS pessoa;
   /*Testa conexao*/
   if (conecta()==SUCCESS) {
      captura_dados(&pessoa);
      Select(&pessoa);
      desconecta();
   }
}

A primeira parte importante é a inclusão da lib, que permite compilar os comandos do mysql

#include <mysql.h>

Include da lib do mysql

O outro ponto importante é a declaração mycon.

MYSQL *mycon;

variavel de conexão do mysq

A mycon, é um handle do mysql. Que permite identificar a comunicação do banco aberta no comando mysql_init.

mycon = mysql_init(NULL);

inicia a comunicação com o mysql

Atribuindo acesso ao banco.

O comando mysql_real_connect atribui usuário e senha a conexão. Bem como estabelecendo um caminho entre o servidor correto.

res = mysql_real_connect(
              mycon,
              HOST,
              USER,
              PASS,
              DATABASE,
              3306,
              NULL,
              0);

São os principais parametros, HOST (o ip do servidor), user (usuário do banco), PASS(senha do banco), DATABASE (banco de dados), PORTA (default 3306).

mysql_query

O mysql_query permite rodar os comandos, tanto select, como update, delete e insert, ele é o mais importante comando.

Para não falar em vídeozinho

Segue a apresentação dos programas rodando.

Referências

https://dev.mysql.com/doc/c-api/8.0/en/

https://zetcode.com/db/mysqlc/

Artigos Relacionados

    Blog Dicas Shell Script
    Debugando Script em Shell Script

    Ao criar um shell script em linux, por vezes ficamos na duvida quando este apresenta algum problema.

    O debug, consiste em uma técnica utilizada para analisar e posteriormente identificar problemas.

    Os scripts bash (shell script) tambem podem ser debugados, para tanto, usamos os parâmetros a seguir

    Debug com impressão

    Usa-se quando for necessário imprimir o resultado do processamento do script

    #!/bin/sh

    set -x

    [comando]

    set +x

    argumento usado na execução do

    Outros parâmetros

    OpçãoSignificado
    set -xImprime as declarações após interpretar metacaracteres e variáveis
    set+xPára a impressão de declarações
    set -vImprime as declarações antes de interpretar metacaracteres e variáveis
    set -fDesativa a geração de nome de arquivo (usando metacaracteres)
    Relação de parâmetros possíveis

    Este artigo foi baseado na referencia:

    https://www.thegeekdiary.com/how-to-debug-shell-scripts/

    Shell Script
    Atualização hora

    Para deixar automatizado a atualização de hora, é possível realizar um agendamento para rodar a atualização da data, usando o comando ntpdate.

    Desta maneira, sempre que o servidor for aberto, ele auto atualizará.

    Procedimento:

    Entre na pasta /etc , edit o arquivo crontab

    10 * * * * ntpdate -u server ntp.research.gov

    10 * * * * ntptime -s server ntp.research.gov

    Salve este comando.

    Desta forma o pdv será atualizado, de 10 em 10 minutos, sem necessidade de novas modificações.

    Servidores de NTP no Brasil

    • server 0.br.pool.ntp.org
    • server 1.br.pool.ntp.org
    • server 2.br.pool.ntp.org
    • server 3.br.pool.ntp.org

    Dicas Projetos Sem categoria Shell Script
    Motion AVI 2 MP4

    Português:

    O objetivo destes scripts são de permitir interagir de forma facil e prática a partir do reconhecimento de movimento do programa do linux motion.

    Os scripts são dois:

    analisa_img.sh

    Executa um script, permitindo a programação de outros comandos associados ao reconhecimento de imagem e/ou analise e filtragem da imagem capturada.

    analisa_avi.sh

    Executa um script, permitindo a progração de outros comandos associados a conversão para formato MP4, permitindo assim a visualização através do browser.

    😉

    Este script pode ser modificado a medida de sua necessidade, peço apenas que no uso, envie um email para marcelomaurinmartins@gmail.com, informando a finalidade. Justamente para que eu veja os frutos de 3 dias de trabalho, realmente auxiliaram alguem em algum lugar do mundo 

    Complemento: 

    Para o perfeito funcionamento deste script é necessário instalar préviamente os seguintes pacotes:

    ffmpeg – realiza a conversão do arquivo avi para mp4

    sudo apt-get install ffmpeg

    Instalação

    1. Deve-se criar as pastas /projetos/sosconsulta/linux/ eu recomendo mudar o caminho da pasta, porem será necessário mudar toda a referencia nos scripts. :-0

    2. Copie a pasta analisa_img para o caminho indicado no passo 1

    Entre na pasta; cd /projetos/sosconsulta/linux/analisa_img/

    3. Rode o Makefile; make all

    Este procedimento, irá instalar os scripts na pasta /usr/local/bin

    4. Configure o arquivo motion.conf, editando em /etc/motion, vim motion.conf

    Altere o arquivo, incluindo:

    on_movie_end /usr/local/bin/analisa_avi.sh %f

    caso tenha threads.conf, faça nas mesmas, se houver necessidade.

    Git:

    https://github.com/MarceloMaurin/motion_avi_mp4/blob/master/analisa_img/analisa_avi.sh

    English

    The purpose of these scripts is to allow easy and practical interaction from the motion recognition of the linux motion program.

    The scripts are two:

    analisa_img.sh

    Performs a script, allowing programming of other commands associated with image recognition and / or analysis and filtering of the captured image.

    analisa_avi.sh

    It executes a script, allowing the programming of other commands associated with the conversion to MP4 format, thus allowing the visualization through the browser.

    😉

    This script can be modified to suit your needs, just ask that in use, send an email to marcelomaurinmartins@gmail.com, stating the purpose. Just so I can see the fruits of 3 days of work, really helped someone somewhere in the world 

    Complement:

    For the perfect operation of this script it is necessary to install the following packages:

    ffmpeg – performs conversion from avi file to mp4

    sudo apt-get install ffmpeg

    Installation

    😮

    1. You should create the folders / projects / sosconsulta / linux / I recommend changing the folder path, however it will be necessary to change the entire reference in the scripts.  

    2. Copy the analisa_img folder to the path indicated in step 1

    Enter the folder; cd / projects / sosconsulta / linux / analisa_img /

    3. Run the Makefile; make all

    This will install the scripts in the / usr / local / bin folder

    4. Configure the motion.conf file by editing in / etc / motion, vim motion.conf

    Change the file, including:

    on_movie_end /usr/local/bin/analisa_avi.sh% f

    if it has threads.conf, do it on them, if need be.

    Git:

    https://github.com/MarceloMaurin/motion_avi_mp4/blob/master/analisa_img/analisa_avi.shThis entry was posted in Sem categoria. Bookmark the permalink.

    maurinsoft.com.br