.:: Menu Rápido ::.

Linux | C/C++ | Downloads | SDL | [×]

segunda-feira, 22 de outubro de 2007

DR Quebra-Cabeça disponível para download !!!

Propaganda é a alma do negócio ! E pensando dessa forma eu criei uma página para um jogo meu, o Quebra-Cabeça.
» DR Quebra-Cabeça 0.1.1


Esta não é a versão mais nova do meu jogo, infelizmente eu perdi parte do meu código e isso foi o que eu consegui recuperar !

Baixe o jogo, se divirta, e depois poste aqui o que você achou !

segunda-feira, 8 de outubro de 2007

Conexão com API C do MySQL

O MySQL é um servidor de banco de dados. Isso significa que ele fica rodando na máquina à espera que uma conexão socket solicite um serviço. Sua API é escrita originalmente em C pela equipe MySQL e depois é transcritas para outras linguagens por outros grupos. É muito comum utilizar o PHP para fazer conexões com o MySQL, mas no meu site a prioridade é C !
Farei uma pequena abordagem da libmysql, até porque também é novidade para mim !

» Post Completo...

  • mysql_init() - Obtem ou inicializa uma estrutura MYSQL.
  • mysql_close() - Fecha uma conexão com o servidor.
  • mysql_real_connect() - Conecta ao servidor MySQL.
  • mysql_errno() - Retorna o número do erro ocorrido recentemente.
  • mysql_error() - Retorna a mensagem do erro ocorrido recentemente.
  • mysql_real_escape_string() - Escapa caracteres especiais em uma string para ser utilizada em uma instrução SQL.
  • mysql_query() - Executa uma consulta SQL especificada com uma string terminada com null.
  • mysql_real_query() - Executa uma consulta SQL especificada como uma string fixa.
  • mysql_insert_id() - Retorna o ID gerado para uma coluna AUTO_INCREMENT pela consulta anterior.
  • mysql_store_result() - Recupera um resultado completo para o cliente.
  • mysql_fetch_fields() - Retorna um vetor de todas as estruturas do campo.
  • mysql_fetch_lengths() - Retorna o tamanho de todas as colunas na linha atual.
  • mysql_num_fields() - Retorna o número de colunas em um conjunto de resultados.
  • mysql_num_rows() - Retorna o número de linhas em um conjunto de resultados.
  • mysql_fetch_row() - Busca o próximo registro no conjunto de resultados.
  • mysql_field_seek() - Coloca o cursor da coluna em uma coluna específica.
  • mysql_free_result() - Libera a memória usada por um conjunto de resultados.
  • mysql_commit() - Faz um commits na transação.
  • mysql_rollback() - Faz um roll back na transação.
Confira a lista completa no manual da MySQL.

*** Exemplo ***
A seguir, estão em destaque algumas das principais linhas de um exemplo que faz uma consulta no banco. O código completo está disponível aqui !

#include <mysql/mysql.h>
#define host "127.0.0.1"
#define user "banco"
#define senha "senha"
#define banco "banco"

MYSQL *sock = NULL;

int main(void){
//--- socket ---//
sock = mysql_init(0);
...
//--- Conexão ---//
mysql_real_connect(sock,host,user,senha,banco,0,NULL,0);
...
consulta();
...
//--- Fechando a conexão ---//
mysql_close(sock);

return 0;
}

void consulta(){
if( mysql_query(sock,"SELECT * FROM `cliente`") ){
printf("falha: %s.",mysql_error(sock));
}else{
//- solicitando resultado da pesquisa
res = mysql_store_result(sock);
if(res){
num_fields = mysql_num_fields(res);
//--- listando dados ---//
while( (row = mysql_fetch_row(res)) ){
lengths = mysql_fetch_lengths(res);
for(i=0; i<num_fields; i++){
printf("%.*s ", (int)lengths[i], row[i]?row[i]:"NULL");
}
printf("\n");
}
mysql_free_result(res);
}else
printf("Erro: %s\n",mysql_error(sock));
}
}


*** Testando ***

$ make
gcc -o mysql_teste mysql_teste.c `mysql_config --cflags --libs`
$ ./mysql_teste
socket... ok.
conexao... ok.
codificacao: latin1
status: Uptime: 17988 Threads: 1 Questions: 377 Slow queries: 0 Opens: 136 Flush tables: 1 Open tables: 18 Queries per second avg: 0.021

linhas: 2
[cod] [nome] [dt_cadastro] [tipo_compra] [em_parcelam] [em_vencim]
1, João Pessoa Filho, 2007-10-07, comum, 0.00, 0.00
2, Maria da Conceição Batista, 2007-10-07, comum, 0.00, 0.00


*** Link's ***
---
Não foi grande coisa, mas é por aí que as coisas funcionam. Em PHP você faria em quantas linhas ?! Com menos de um terço talvez, mas em momento algum eu estive comparando isso.
Em breve, um outro post sobre como tornar esta aplicação visual. E todo este código em c fará mais sentido !

terça-feira, 2 de outubro de 2007

Vídeo Compiz Fusion (Desktop 3D)

Eu poreria escrever um texto enorme sobre o Linux, mas uma imagem vale mais do que mil palavras !


Os efeitos do vídeo acima são de versões em desenvolvimento do Compiz Fusion (o resultado da fusão do Beryl com o Compiz), e foram divulgados em julho.
É bem provável que venha junto com a versão 7.10 do Ubuntu !

---
Esse vídeo é d++ !!!

quarta-feira, 26 de setembro de 2007

Compilando com gcc e Makefile

Mesmo que você seja daqueles que não abre mão de uma IDE (Ambiente de Desenvolvimento Integrado), seria muito interessante saber o que está rolando a nível de compilador.
Uma IDE serve para agilizar um projeto, mas dependendo do nível de entendimento do programador ela pode fazer papel de mascaradora, ocultando todos os passos que são necessários para se compilar um projeto.

» Post Completo...

# gcc -o hello_world hello_world.c

Este comando irá criar um aplicativo (hello_world) compilando o código hello_world.c.
Muito simples, mas esse uso simplificado compila não mais do que um hello_world ! Pois um projeto possui mais arquivos e passos diferentes de compilação.

É recomendado, quando se tem um projeto maior, o uso de vários arquivos (*.h e *.c) para que se tenha uma maior organização.

*** Lincando OBJ'S ***
Imagine o seguinte projeto:

main.c - Possui a função main e o código de interação com o usuário.

08: #include "funcoes.h"
10: int main(void){
--: ...
16: return 0;
17: }

funcoes.h - Uma biblioteca de funções.

06: #ifndef funcoes_H
07: #define funcoes_H
09: #include <math.h>
11: float areaRetangulo(float base,float altura);
12: float areaCirculo(float raio);
14: #endif

funcoes.c - A implementação da biblioteca de funções.

06: #include "funcoes.h"
08: float areaRetangulo(float base,float altura){
09: return base*altura;
10: }
12: float areaCirculo(float raio){
13: return 2*M_PI*raio;
14: }

Para compilar este projeto nós vamos precisar de mais de um comando.
Primeiro vamos criar os obj's (*.obj ou *.o), que são um tipo de código intermediário.

# gcc -o main.o -c main.c
# gcc -o funcoes.o -c funcoes.c

E agora devemos lincar estes obj's para criar um arquivo único. Irei chamar de projeto.

# gcc main.o funcoes.o -o projeto

Os obj's também vão te servir quando você não quiser compilar todos os arquivos novamente, mas é preciso ter em mente que uma alteração em um arquivo c (que não será incluído em nenhum outro arquivo) não causa alteração em outros arquivos, mas uma alteração em um arquivo h causa, pois este será incluído em outros arquivos e assim será alterada a estrutura destes. O bom é sempre que puder, apagar todos os obj's e recompilar tudo.
Por exemplo, o que seria necessário se eu alterar o código do:
  • main.c
  • # gcc -o main.o -c main.c
    # gcc main.o funcoes.o -o projeto

  • funcoes.c
  • # gcc -o funcoes.o -c funcoes.c
    # gcc main.o funcoes.o -o projeto

  • funcoes.h
  • # gcc -o main.o -c main.c
    # gcc -o funcoes.o -c funcoes.c
    # gcc main.o funcoes.o -o projeto

    *** Makefile ***
    Makefile é apenas o nome do arquivo que o comando make utiliza para compilar o seu projeto.
    Imagine o Makefile como um arquivo shell script com a vantagem extra de resolver problemas de dependência de arquivos.
    Para compilar nosso projeto nós vamos escrever o Makefile da seguinte maneira:

    05: OBJS=main.o funcoes.o
    07: all: projeto
    09: projeto: $(OBJS)
    10: gcc $(OBJS) -o $@
    12: main.o: main.c
    13: gcc -c main.c -o main.o
    15: funcoes.o: funcoes.c
    16: gcc -c $< -o $@

    Foi criada a variável OBJS na linha 05 para facilitar seu uso nas linhas 09 e 10.
    Pode parecer estranho, mas a linhas 13 e 16 fazem praticamente a mesma coisa.

    Para compilar o arquivo funcoes.c basta usar o comando:

    # make funcoes.o

    1. O make irá ler o arquivo Makefile e identificar que funcoes.o tem como dependência funcoes.c.
    2. Caso funcoes.c seja mais recente que funcoes.o ele irá executar o código logo abaixo (O TAB no começo da linha é obrigatório).
    Para compilar o projeto você pode usar um dos 3 comandos:

    # make projeto
    # make all
    # make

    *** Diretivas de Compilação ***
    Não achou estranho eu usar #ifndef, #define e #endif no arquivo funcoes.h ?!
    Estes comandos são chamados diretivas de compilação e são interpretadas pelo pré-processador. É o código antes do código.
    Com #define podemos incluir um arquivo em outro, e com #ifndef e #endif criamos um bloco condicional.
    Entendendo melhor, não podemos declarar o escopo de uma função mais de uma vez, e quando incluímos um arquivo *.h mais de uma vez é exatamente isto que ocorre.
    No nosso exemplo, a diretiva #ifndef serve para garantir que o escopo das funções só sejam incluídos em em arquivo caso a #define não exista. A #define passa a existir logo em seguida e o bloco é finalizado em #endif.

    *** Arquivos ***
  • Código fonte do projeto

  • *** LINK'S ***
  • Wiki IDE (Ambiente de Desenvolvimento Integrado)
  • Wiki GCC (GNU Compiler Collection)
  • make
  • shell script
  • terça-feira, 25 de setembro de 2007

    Que tal mudar para Ubuntu ?!

    Ubuntu - Linux para seres humanos !!!

    Neste post eu estarei apenas apresentando o Ubuntu, e não estarei discutindo sobre configurações ou comandos.
    Serve de apoio a iniciantes do Linux e usuários exaustos de outras distribuições.

    » Post Completo...

  •