O bash guarda a informação a respeito da execução de um programa na variável de ambiente $? logo após a execução da mesma. Avaliando o conteúdo da mesma é possível verificar se uma determinada execução terminou com sucesso ou não.
Exemplo:
somecommand argument1 argument2
RETVAL=$?
[ $RETVAL -eq 0 ] && echo Success
[ $RETVAL -ne 0 ] && echo Failure
Mostrando postagens com marcador c. Mostrar todas as postagens
Mostrando postagens com marcador c. Mostrar todas as postagens
segunda-feira, 22 de julho de 2013
sexta-feira, 14 de junho de 2013
Programa C - Compilação de Programas via prompt
Para compilar programas 'C' em distribuições Fedora/CentOs (ou outras) usando o compilador/linkeditor gcc (GNU Compiler Collection, http://gcc.gnu.org/) utilizar, preferencialmente, a seguinte sintaxe:
gcc -Wall -o <executavel> <fonte.c>
Exemplo:
gcc -Wall -o teste teste.c
Caso o programa use a biblioteca Math.h, incluir o parâmetro -lm para linkeditar com esta biblioteca:
gcc -Wall -lm -o <executavel> <fonte.c>
Exemplo:
gcc -Wall -lm -o teste teste.c
Outros parâmetros comuns:
-c : Apenas compila o programa, mas não faz a linkedição. Para linkeditar então deve-se chamar novamente o gcc, passando com a seguinte sintaxe:
gcc -o <executavel> <objeto>
exemplo:
1) Compilação
gcc -c -o teste.o teste.c
2) Linkedição
gcc -o teste teste.o
-glevel (normalmente -g3): Inclui informação completa de Debug, para uso com o GDB (GNU Debugger (http://www.gnu.org/software/gdb/)
gcc -Wall -o <executavel> <fonte.c>
Exemplo:
gcc -Wall -o teste teste.c
Caso o programa use a biblioteca Math.h, incluir o parâmetro -lm para linkeditar com esta biblioteca:
gcc -Wall -lm -o <executavel> <fonte.c>
Exemplo:
gcc -Wall -lm -o teste teste.c
Outros parâmetros comuns:
-c : Apenas compila o programa, mas não faz a linkedição. Para linkeditar então deve-se chamar novamente o gcc, passando com a seguinte sintaxe:
gcc -o <executavel> <objeto>
exemplo:
1) Compilação
gcc -c -o teste.o teste.c
2) Linkedição
gcc -o teste teste.o
-glevel (normalmente -g3): Inclui informação completa de Debug, para uso com o GDB (GNU Debugger (http://www.gnu.org/software/gdb/)
Programa C - Utilização da Biblioteca Math
Em distribuições Fedora/CentOs, quando se quer utilizar a biblioteca MATH (math.h / libm) em programas "C", por algum motivo o linkeditor normalmente não encontra esta biblioteca por default. Neste caso, é necessário informar ao compilador no momento da compilação para utilizá-la:
gcc -o <executavel> -lm <fonte>
Exemplo:
gcc -o teste -lm teste.c
Quando usando a IDE do Eclipse, deve-se entrar nas propriedades do projeto (ALT-ENTER), ir na opção C/C++ Build, seção Settings, GCC C Linker, Libraries, incluir a Library (-l) m.
gcc -o <executavel> -lm <fonte>
Exemplo:
gcc -o teste -lm teste.c
Quando usando a IDE do Eclipse, deve-se entrar nas propriedades do projeto (ALT-ENTER), ir na opção C/C++ Build, seção Settings, GCC C Linker, Libraries, incluir a Library (-l) m.
segunda-feira, 13 de maio de 2013
C - Suporte a Arquivos com mais de 4Gbytes
Quando se utiliza programas "C", compilados com GCC, para leitura de arquivos com mais de 4 Gigabytes deve-se utilizar os parâmetros :
-D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
-D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
segunda-feira, 29 de abril de 2013
"C" - Conexão MySQL
Pré-requisitos
mysql (client)
mysql-devel
A compilação de programas com acesso a bibliotecas do MySQL necessitam de alguns parâmetros especiais. Estes parâmetros podem ser obtidos através da execução do script 'mysql_config' que faz parte do pacote mysql-devel. Para compilar o programa, usar a seguinte sintaxe:
gcc -o <output> $(mysql_config --cflags) <fonte.c> $(mysql_config --libs)
exemplo:
gcc -o consulta_mysql $(mysql_config --cflags) consulta_mysql.c $(mysql_config --libs)
Exemplo de programa para conexão ao MySQL
#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
MYSQL *conexao;
MYSQL_RES *res;
MYSQL_ROW linhas;
MYSQL_FIELD *campos;
char query[]="select * from <tabela>;";
int i;
char *server = "<servidor>";
char *user = "<usuario>";
char *password = "<senha>";
char *database = "<banco>";
unsigned int port = <porta>;
conexao = mysql_init(NULL);
/* Connect to database */
if (!mysql_real_connect(conexao, server,
user, password, database, port, NULL, 0)) {
fprintf(stderr, "%s\n", mysql_error(conexao));
exit(EXIT_FAILURE);
}
/* send SQL query */
if (mysql_query(conexao, query)) {
fprintf(stderr, "%s\n", mysql_error(conexao));
exit(EXIT_FAILURE);
}
res = mysql_store_result(conexao);
if (res)
{
campos = mysql_fetch_fields(res);
for (i=0; i < mysql_num_fields(res); i++)
{
printf("%s", (campos[i]).name);
if (mysql_num_fields(res) > 1)
printf("\t");
}
printf("\n");
while ((linhas = mysql_fetch_row(res)) != NULL)
{
for (i=0; i < mysql_num_fields(res); i++)
printf("%s\t", linhas[i]);
printf("\n");
}
}
/* close connection */
mysql_free_result(res);
mysql_close(conexao);
}
mysql (client)
mysql-devel
A compilação de programas com acesso a bibliotecas do MySQL necessitam de alguns parâmetros especiais. Estes parâmetros podem ser obtidos através da execução do script 'mysql_config' que faz parte do pacote mysql-devel. Para compilar o programa, usar a seguinte sintaxe:
gcc -o <output> $(mysql_config --cflags) <fonte.c> $(mysql_config --libs)
exemplo:
gcc -o consulta_mysql $(mysql_config --cflags) consulta_mysql.c $(mysql_config --libs)
Exemplo de programa para conexão ao MySQL
#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
MYSQL *conexao;
MYSQL_RES *res;
MYSQL_ROW linhas;
MYSQL_FIELD *campos;
char query[]="select * from <tabela>;";
int i;
char *server = "<servidor>";
char *user = "<usuario>";
char *password = "<senha>";
char *database = "<banco>";
unsigned int port = <porta>;
conexao = mysql_init(NULL);
/* Connect to database */
if (!mysql_real_connect(conexao, server,
user, password, database, port, NULL, 0)) {
fprintf(stderr, "%s\n", mysql_error(conexao));
exit(EXIT_FAILURE);
}
/* send SQL query */
if (mysql_query(conexao, query)) {
fprintf(stderr, "%s\n", mysql_error(conexao));
exit(EXIT_FAILURE);
}
res = mysql_store_result(conexao);
if (res)
{
campos = mysql_fetch_fields(res);
for (i=0; i < mysql_num_fields(res); i++)
{
printf("%s", (campos[i]).name);
if (mysql_num_fields(res) > 1)
printf("\t");
}
printf("\n");
while ((linhas = mysql_fetch_row(res)) != NULL)
{
for (i=0; i < mysql_num_fields(res); i++)
printf("%s\t", linhas[i]);
printf("\n");
}
}
/* close connection */
mysql_free_result(res);
mysql_close(conexao);
}
quarta-feira, 24 de abril de 2013
Programas C : Acessar banco de dados Oracle - Linux
Pré-requisitos:
* Obrigatórios (x86 - http://www.oracle.com/technetwork/topics/linuxsoft-082809.html e x86_64 - http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html)
Conector C - Oracle
Ocilib - http://orclib.sourceforge.net/
Após efetuar o download e descompactar o arquivo, use esta dica importante para a instalação:
sudo ./configure --with-oracle-headers-path=<caminho para onde estão os includes do sdk oracle> --with-oracle-home=<caminho do oracle home/instant client onde estão as bibliotecas do oracle>
Exemplo:
sudo ./configure --with-oracle-headers-path=/usr/lib/instantclient_10_2/sdk/include --with-oracle-home=/usr/lib/instantclient_10_2/
Depois:
sudo make
sudo make install
Importante: as variáveis de ambiente ORACLE_HOME e LD_LIBRARY_PATH devem estar setadas !
ORACLE_HOME=<caminho do oracle home/instant client onde estão as bibliotecas do oracle>
LD_LIBRARY_PATH=<caminho do oracle home/instant client onde estão as bibliotecas do oracle>:<caminho onde foram instaladas as bibliotecas do ocilib)
USER_LIBS=<caminho onde está instalado o ocilib>
Exemplos:
(32 bits)
(64 bits)
Os seguintes parâmetros deverão ser usados
Compilação:
(32 bits)
-I$USER_LIBS/include
Linkedição
-L/$ORACLE_HOME -lclntsh -L$USER_LIBS/lib -locilib
Exemplo via linha de comando:
gcc conecta_oracle.c -o conecta_oracle -I$USER_LIBS/include -L/$ORACLE_HOME -lclntsh -L$USER_LIBS/lib -locilib
(64 bits)
Os seguintes parâmetros deverão ser usados
Compilação:
-I$USER_LIBS/include
Linkedição
-L$ORACLE_HOME/lib -lclntsh -L$USER_LIBS/lib -locilib
Exemplo via linha de comando:
(32 bits)
gcc conecta_oracle.c -o conecta_oracle -I$USER_LIBS/include -L$ORACLE_HOME -lclntsh -L$USER_LIBS/lib -locilib
(64 bits)
gcc conecta_oracle.c -o conecta_oracle -I$USER_LIBS/include -L$ORACLE_HOME/lib -lclntsh -L$USER_LIBS/lib -locilib
Exemplo de programa "C" para acessar banco de dados oracle:
#include "ocilib.h"
int main(void)
{
OCI_Connection *cn;
OCI_Statement* st;
OCI_Resultset* rs;
if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
return EXIT_FAILURE;
cn = OCI_ConnectionCreate("VEDBD02_205", "usr_r2s2", "r2s2", OCI_SESSION_DEFAULT);
printf("Server major version : %i\n", OCI_GetServerMajorVersion(cn));
printf("Server minor version : %i\n", OCI_GetServerMinorVersion(cn));
printf("Server revision version : %i\n\n", OCI_GetServerRevisionVersion(cn));
printf("Connection version : %i\n\n", OCI_GetVersionConnection(cn));
st = OCI_StatementCreate(cn);
OCI_ExecuteStmt(st, "select id_sdr, dat_ini_vig, dat_fim_vig, vlr_sdr, dat_sdr from tb_groa_valor_sdr order by 1");
rs = OCI_GetResultset(st);
while (OCI_FetchNext(rs))
{
printf("%i - %s - %s - %s - %s\n", OCI_GetInt(rs, 1),
OCI_GetString(rs,2), OCI_GetString(rs,3),
OCI_GetString(rs,4), OCI_GetString(rs,5));
}
OCI_Cleanup();
return EXIT_SUCCESS;
}
* Obrigatórios (x86 - http://www.oracle.com/technetwork/topics/linuxsoft-082809.html e x86_64 - http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html)
- Oracle Instant Client Package - Basic (All files required to run OCI, OCCI, and JDBC-OCI applications) - Bibliotecas que permitem o acesso ao banco oracle
- Oracle Instant Client Package - SDK (Additional header files and an example makefile for developing Oracle applications with Instant Client) - Arquivos source/headers para usar nos programas "C"
* Opcionais
- Oracle Instant Client Package - SQL*Plus(Additional libraries and executable for running SQL*Plus with Instant Client) - Possibilita a conexão ao Oracle através do SQL *PLUS
TNSNAME
Deve existir o arquivo TNSNAME com as conexões que serão utilizadas. Este arquivo normalmente deverá ficar em /etc/tnsnames.ora
Conector C - Oracle
Ocilib - http://orclib.sourceforge.net/
Após efetuar o download e descompactar o arquivo, use esta dica importante para a instalação:
sudo ./configure --with-oracle-headers-path=<caminho para onde estão os includes do sdk oracle> --with-oracle-home=<caminho do oracle home/instant client onde estão as bibliotecas do oracle>
Exemplo:
sudo ./configure --with-oracle-headers-path=/usr/lib/instantclient_10_2/sdk/include --with-oracle-home=/usr/lib/instantclient_10_2/
Depois:
sudo make
sudo make install
Importante: as variáveis de ambiente ORACLE_HOME e LD_LIBRARY_PATH devem estar setadas !
ORACLE_HOME=<caminho do oracle home/instant client onde estão as bibliotecas do oracle>
LD_LIBRARY_PATH=<caminho do oracle home/instant client onde estão as bibliotecas do oracle>:<caminho onde foram instaladas as bibliotecas do ocilib)
USER_LIBS=<caminho onde está instalado o ocilib>
Exemplos:
(32 bits)
ORACLE_HOME=/usr/lib/instantclient_10_2
LD_LIBRARY_PATH=/usr/lib/instantclient_10_2:/usr/local/lib
LD_LIBRARY_PATH=/usr/lib/instantclient_10_2:/usr/local/lib
ORACLE_HOME=/usr/lib/oracle/10.2.0.4/client64
LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.4/client64/lib:/usr/local/lib:/usr/local/lib64
LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.4/client64/lib:/usr/local/lib:/usr/local/lib64
USER_LIBS=/usr/local
Para compilar/linkeditar programasOs seguintes parâmetros deverão ser usados
Compilação:
(32 bits)
-I$USER_LIBS/include
Linkedição
-L/$ORACLE_HOME -lclntsh -L$USER_LIBS/lib -locilib
Exemplo via linha de comando:
gcc conecta_oracle.c -o conecta_oracle -I$USER_LIBS/include -L/$ORACLE_HOME -lclntsh -L$USER_LIBS/lib -locilib
(64 bits)
Os seguintes parâmetros deverão ser usados
Compilação:
-I$USER_LIBS/include
Linkedição
-L$ORACLE_HOME/lib -lclntsh -L$USER_LIBS/lib -locilib
Exemplo via linha de comando:
(32 bits)
gcc conecta_oracle.c -o conecta_oracle -I$USER_LIBS/include -L$ORACLE_HOME -lclntsh -L$USER_LIBS/lib -locilib
(64 bits)
gcc conecta_oracle.c -o conecta_oracle -I$USER_LIBS/include -L$ORACLE_HOME/lib -lclntsh -L$USER_LIBS/lib -locilib
Exemplo de programa "C" para acessar banco de dados oracle:
#include "ocilib.h"
int main(void)
{
OCI_Connection *cn;
OCI_Statement* st;
OCI_Resultset* rs;
if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
return EXIT_FAILURE;
cn = OCI_ConnectionCreate("VEDBD02_205", "usr_r2s2", "r2s2", OCI_SESSION_DEFAULT);
printf("Server major version : %i\n", OCI_GetServerMajorVersion(cn));
printf("Server minor version : %i\n", OCI_GetServerMinorVersion(cn));
printf("Server revision version : %i\n\n", OCI_GetServerRevisionVersion(cn));
printf("Connection version : %i\n\n", OCI_GetVersionConnection(cn));
st = OCI_StatementCreate(cn);
OCI_ExecuteStmt(st, "select id_sdr, dat_ini_vig, dat_fim_vig, vlr_sdr, dat_sdr from tb_groa_valor_sdr order by 1");
rs = OCI_GetResultset(st);
while (OCI_FetchNext(rs))
{
printf("%i - %s - %s - %s - %s\n", OCI_GetInt(rs, 1),
OCI_GetString(rs,2), OCI_GetString(rs,3),
OCI_GetString(rs,4), OCI_GetString(rs,5));
}
OCI_Cleanup();
return EXIT_SUCCESS;
}
Assinar:
Comentários (Atom)
