quinta-feira, 20 de setembro de 2012

Entendendo Processos do Unix com Programas em C – Parte 1


Este Post é em homenagem ao trabalho do meu colega de turma Joelson da Cunha Lucena,

Motivação
Estou estudando Sistemas Operacionais com base Unix e tenho feito alguns testes em C para comprovar os estudos. Creio que possa ser útil a publicação desses programinhas criados para compartilhar o conhecimento.
Processos em Sistemas Unix
Um processo é um programa em execução.
Vários conceitos permeiam o mundo dos processos, tais como a estrutura de um processo na memória, os possíveis estados de um processo, o bloco de controle de processo (PCB), como o sistema operacional trata os processos durante suas trocas de contexto, filas de escalonamento de processos, os escalonadores propriamente ditos, etc. (Talvez entremos mais a fundo em cada um desses conceitos mais pra frente)
Como o foco é ser prático, vamos a um exemplo de como podemos gerar um processo em Unix.
Mãos na Massa
Estando em algum sistema com base Unix (Linux, Mac OS, BSD, Hurd, etc), vamos criar um arquivo chamado loop.c no qual conterá nosso código de programa na linguagem C. O local de trabalho fica a seu critério, mas no exemplo vou usar o home do meu usuário.
Dentro do arquivo, criaremos o seguinte código na linguagem C:
#include
#include
int main() {
    while(1);
}
O programa começa com a declaração dos includes, que são as bibliotecas que  nos fornecem as funções usadas no nosso código. O ‘int main()’ é a declaração do método principal a ser executado naquele determinado arquivo/programa. Repare que seu conteúdo é apenas ‘while(1)’, o que provocará um loop infinito dentro do programa. Fizemos isso para que você possa ver o processo sendo executado no sistema operacional, então se tivéssemos colocado qualquer programação finda, não seria possível acompanharmos o importante passo que o exercício propõe, que é vermos o processo que criamos em execução.
Como os arquivos .c não podem ser executados diretamente, devemos compilar o arquivo para criarmos um executável. Para tal, posicionado no terminal na pasta onde consta o arquivo loop.c criado, digite o seguinte comando:
gcc -o loop loop.c
onde:
  • gcc -o – é o programa a ser chamado para que o sistema compile o arquivo
  • loop – é o nome do arquivo que será criado
  • loop.c – é o nome do nosso arquivo origem de código fonte.
Tendo criado o nosso arquivo executável, para chamá-lo, podemos digitar no terminal:
./loop&
onde:
  • ./ – é o indicador de que chamamos determinado arquivo à execução
  • loop – é o nome do arquivo executável que geramos e queremos executar
  • & – Serve para que o sistema rode esse programa em background. Se não tivéssemos especificado esse caracter, o terminal nos bloquearia naquela sessão até que finalizássemos o processo abruptamente.
Para vermos o nosso processo em execução, podemos digitar no terminal o comando: top
Ele te retornará uma lista de processos em execução, tal como isto:
 2160 joelson   20   0  4148  352  272 R  100  0.0   2:00.47 loop                                                                                                       
 1149 root      20   0  161m  24m  11m S    1  0.4   1:36.36 Xorg                                                                                                       
 1890 joelson   20   0 1107m 273m  36m S    1  4.7   4:26.13 firefox                                                                                                     1934 joelson   20   0  373m  37m  20m S    1  0.6   0:30.50 plugin-containe    
Repare que o nosso processo loop é logo o primeiro da minha fila!
Como o nosso processo é de loop infinito, ele nunca deixará de executar a não ser que o interrompemos.
Ainda na tela de visualização dos processos em execução, para que você finalize o processo loop, digite k
Ele aguardará uma entrada com o identificador do processo a ser finalizado. No meu caso, é 2160, então é o que eu digitarei e darei enter.
Após, ele pede um sinal de finalização. Digite 9 e dê enter novamente. Pronto, finalizamos o processo!
Para sair da visualização da lista de processos, digite: ctrl + c
Conclusão
Entender como funcionam os sistemas operacionais é muito interessante, mas vermos na prática seu funcionamento é muito melhor. Vimos como criamos e, de maneira limitada, que podemos manipular nossos processos e seus estados. Nos estudos que ainda serão postados, vamos nos aprofundando nas especificidades dos processos. Espero que seja de proveito de todos.

quinta-feira, 26 de abril de 2012

Consulta SQL de Calculo de Horas no Oracle, considerando o mês atual.

Boa tarde a todos,

Hoje encontrei dificuldade em uma consulta SQL no Oracle, que foi resolvida graças a meu colega de trabalho Anderson Santos da Silva vulgo  "Balrog". Vou citar cada linha do código e comenta-la logo abaixo,

Problema:  Calcular a diferença de TEMPO em minutos entre dois campos.


 AbaixoDATE(data_abertura, data_baixa).  "Ate  esse momento nada de anormal"

No entanto a consulta precisaria considerar apenas os registros do campo data_baixa do mês corrente.

Para o calculo de o TEMPO considerar o seguinte:

 Caso o campo data_abertura tivesse registro anterior ao mês atual ele precisaria desconsiderar esse valor e considerar  a data a partir  do dia 01 do mês atual as 00:00:00hs 

Ou 

Se o campo data_abertura tivesse data do mês atual, efetuar o calculo normalmente.

Solucao:

select

data_abertura,
data_baixa,
case

  --Aqui comparamos se a data de abertura é menor que o mes atual com parando a data do SYSDATE
  --Utilizamos também o TRUNC para mantém apenas a parte desejada de um numéro no caso o mês



   when ADD_MONTHS(TRUNC(data_abertura, 'MONTH'), -0) <
        ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), -0) then

  --Aqui alem de usar  ROUND que arredonda o valor dada uma posição específica.
  --diminuimos a data_baixa pela função "ADD_MONTHS(TRUNC(SYSDATE, 


  'MONTH'), -0" que retorna o mes atual e 1 dia e 1 hora

 --exatamente o que queriamos 00:00:00hs
  --Depois tranformamos para minutos

    ROUND(((data_baixa - ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), -0)) * 24 * 60), 2)
   else

  --Aqui fazemos o calculo normal dos dois campos caso esteja dentro do mes atual.
    
ROUND(((data_baixa - data_abertura) * 24 * 60), 2)
end as tempo_minutos_f

  from gtt
------




Foi uma resposta simples e inteligente.

Obrigado Mr. Anderson Balrog



quarta-feira, 21 de março de 2012

Instalando o Joomla 1.5 no CentOs

Um ótima fonte, em inglês

http://cisconet.com/application/web-application/joomla/503-how-to-install-joomla-15-on-centoos-5.html

Instalando o PHP 5.2 no CentOS pelo YUM

Instalando o PHP 5.2 no CentOS pelo YUM



Caros,

Passei ultimamente por um problema meio chato onde tive que instalar o phpmyadmin no CentOS Linux. O problema não foi nem instalar o phpmyadmin, mas sim o PHP 5.2, pois quando eu o instalei pelo yum, a versão instalada foi a 5.1 (e essa versão não funciona com o phpmyadmin 3.2.4).

Então, seguem os passos para se instalar o PHP 5.2 no CentOS via yum.

1 - Você terá que importar a chave RPM-GPG-KEY do repositório utterramblings digitando o seguinte comando:

# rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

2 - Adicione o seguinte repositório no seu arquivo CentOS-Base.repo:

# vi /etc/yum.repos.d/CentOS-Base.repo

[utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

3 - Depois, digite os seguintes comandos:

# yum clean all
# yum check-update

Aparecerá uma lista de pacotes que já estão instalados no seu PC e que devem ser atualizados para a nova versão (se você já tiver instalado o PHP pelo yum com a versão 5.1 irá aparecer na lista a 5.2).

4 - Em seguida, para atualizar os pacotes instalados do PHP, digite:

# yum update php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel php-mcrypt -y

5 - Pronto! Agora é só instalar o phpmyadmin e tentar abrí-lo a partir de um browser...

Valeu!

Esse tópico foi desenvolvido a partir do seguinte endereço: www.jasonlitka.com/yum-repository

Fonte: http://www.vivaolinux.com.br/dica/Instalando-o-PHP-5.2-no-CentOS-pelo-YUM

Instalando programas no Linux

Esse artigo visa tirar dúvidas simples sobre como instalar pacotes e programas no Linux, para tanto será visto como instalar pacotes para as principais distribuições Linux atuais.

1- Como instalar, atualizar e remover aplicativos no RedHat
1.a - Erros mais comuns ?
1.b - Como instalar um pacote rpm que tenho no cd de minha distro ou da internet que baixei?
1.c- Mais comandos rpms
2- Como instalar um pacote que terá que ser compilado ?Muito usado pelos usuários de slackware.
2.a - Descompactando pacotes que eu baixei da internet.
2.b - Como instalar um pacote source que veio no formato .tar.gz e .tar.bz2
2.c - Outras opções que deixam a instalação bem flexível ao que você deseja.
3 - Instalando, removendo e atualizando aplicativos no Debian.

Uma das maiores dificuldades para quem esta começando no Linux é instalar, atualizar e remover aplicativos.Mas como você vera nesse tutorial, dificuldade não existe.

1- Como instalar, atualizar e remover aplicativos no RedHat, Fedora, Conectiva

As distros que utilizam o gerenciador de pacotes rpms são muitas, como redhat que padronizou esse sistema de pacotes e distros que se basearam nele o utilizam como ex: fedora, conecta, madrake, etc.Essas distros utilizam como gerênciador de aplicativos um utilitário chamado RPM, ou "Red Hat package Manager".Ao tentar instalar um aplicativo usando o comando rpm -i pacote.rpm, ele verifica as bibliotecas, e caso você não a tenha ele ira acusar, dizendo quais libs você terá que instalar.

1.a - Erros mais comuns ?
É muito comum ocorrerem erros ao tentar instalar um aplicativo, e os motivos são vários.Um deles, é que muitos deixam de instalar as principais bibliotecas do sistema."Recomendação: caso você tenha espaço suficiente no seu HD instale todas as bibliotecas".O que acontece muito também, são erros que são ocasionados pela versão do muito antiga, ou muito nova de bibliotecas que o linux usa, ou seja, os aplicativos dependem da versão de bibliotecas que você tem instalado, por isso ex: Vamos supor que você tenha um linux com a versão 2.0 do glibc, 2.8 do gcc, 2.0 do gtk,1.0 do bonobo e que você tente instalar um aplicativo que necessite das bibliotecas mais recentes.Ele procurará no sistema as versões superiores a essa que você tem instalado, e com isso lhe mostrará uma série de dependências.O mesmo exemplo serviria a você caso você tentasse instalar um aplicativo muito recente num distro não muito atualizada :).E para resolver esse problema, se o numero de dependências não for muito grande, até vale a pena tentar procurar pelas bibliotecas e instalá-las, mas se o número de dependências for muito grande, o mais indicado mesmo é instalar a distribuição mais atualizada, porque uma biblioteca necessita de uma série de outras libs, e se você pensa em atualizar biblioteca por biblioteca, isso pode te dar muita dor de cabeça :(.
Ao se deparar com um erro de dependência, não se desespere, tente procurar a biblioteca no cd de sua distro atual, caso não a encontre você pode procurar diretamente no site do aplicativo, ou você ainda pode procurar pelas dependências nos sites http://www.rpmfind.net - para e http://www.freshmeat.net, procure pela biblioteca referente a sua distro atual e a instale.Detalhe: Dentro do possível, todos os aplicativos que o site disponibiliza, estão com suas dependências mais criticas.

1.b - Como instalar um pacote rpm que tenho no cd de minha distro ou da internet que baixei?

Você pode instalar um pacote rpm em modo gráfico, apenas clicando sobre ele, feito isto o linux abrirá o rpmpackage e a instalação é automatica,bastando você clicar em instalar, ou via terminal, digitando o comando:

rpm -ivh nomedopacote.rpm - para instalar
Com esse comando ele irá distribuir nas pastas de sistema, os binários, executáveis, arquivos de configuração e arquivos de ajuda.Os executáveis são instalados na pasta /usr/bin, os arquivos de configuração geralmente são instalados na pasta /etc, e os arquivos de ajuda costumam ficar na pasta /usr/share/nome_do_programa

1.c- Mais comandos rpms

instalar: rpm -i pacote.rpm
atualizar: rpm -Uvh pacote.rpm
desinstalar: rpm -e pacote.rpm
para forçar o pacote: rpm -i pacote.rpm --force
instalar s/ dependências: rpm -i pacote.rpm --nodeps
verificar pacote instalado: rpm -q pacote.rpm

erro mais comum:

# rpm -ivh linuxconf-printer-1.25r3-27U70_1cl.i386.rpm
erro: dependências falhadas:
rhs-printfilters é necessário pelo linuxconf-printer-1.25r3-27U70_1cl
como você pode ver, ele acusou a falta do aplicativo rhs-printfilters

2- Como instalar um pacote que terá que ser compilado ? Muito usado pelos usuários de slackware.

Você pode baixar o pacote source do programa e compila-lo.Quando você compila um aplicativo, todas as bibliotecas são investigadas, afim de se saber se elas existem para que o aplicativo possa ser compilado, ou seja, para que ele gere o executável do programa a ser usado.Esse processo pode demorar um pouco, vai depender muito do seu processador e do total de memória ram que você tenha.Se você for compilar um programa de 5mb por exemplo num pentium 200, com 30 de ram esse processo pode chegar a mais de 1:30.Os aplicativos incluidos nesse site, quase que na sua totalidade são programas que necessitam ser compilados, você deve estar perguntando porque a opção de colocar aplicativos que necessitam ser compilados, a resposta é "compatibilidade", o pacote que precisa ser compilado pode ser instalado em qualquer distro, não dá pra tentar instalar um pacote .deb do debian no slackware, e num da pra instalar um pacote .tgz do slackware no redhat, por isso a escolha pelo source.Fora isso você pode até achar que a instalação é meio dificil, mas depois você vai ver que ela pode ser muito flexível.
Dica: Ao instalar um aplicativo, não fique olhando a tela, e vendo aquele monte de letrinhas: subindo com o nome gcc -- blablabla, isso é extressante:).Sempre que você for instalar um aplicativo que esteja no formato source, aproveite a ocasião, ex: se você estiver navegando, comece a compilar o aplicativo e o deixe ele la, esqueça que ele existe, navegue bastante na internet, e depois de um certo tempo veja se a compilação já acabou, você vai ver que o tempo vai passar muito rápido:).Porque não também ouvir uma musica e relaxar, isso seria muito bom.

2.a - Descompactando pacotes que eu baixei da internet.
Para descompactar arquivos .zip abra um terminal no linux e digite:

unzip nomedoarquivo.zip

Baixei um arquivo no formato tar como descompactá-lo.

Para descompactar arquivos .tar abra um terminal no linux e digite:
tar -zxvf nomedoarquivo.tar

Baixei um arquivo no formato tar.gz como descompactá-lo, para instalá-lo.

Para descompactar arquivos .tar.gz abra um terminal no linux e digite:
tar -zxvf nomedoarquivo.tar.gz


2.b - Como instalar um pacote source que veio no formato .tar.gz e .tar.bz2
exemplificando de forma simples.

1º Você abre um terminal de dentro do diretório e digita:

$ ./configure

Com esse comando as bibliotecas do seu Linux seram investigadas a fim de se saber se as bibliotecas de quem o aplicativo necessita, estão presentes.Caso uma ou mais bibliotecas não sejam encontradas esse processo é terminado e você não pode iniciar a segunda parte que é make.Se você chegou até a parte make, é porque o aplicativo pode ser compilado, agora você não precisa mais ficar atento a saber se o aplicativo pode ou não ser compilado, de o comando make para gerar o executável e depois de o comando make install para instalar.
erros:ex:
checking for extra libs... yes
checking for bonobo... configure: error: your system is
not able to compile a small bonobo application!
Check, if you installed the bonobo libs.
o comando ./configure que verifica as bibliotecas instaladas, acusa a falta da lib bonobo.Como falamos logo em cima, procure no cd de sua distro por essa lib, ou procure-a em http://www.rpmfind.nete http://www.freshmeat.net.

2º agora digite:

$ make

Com esse comando o aplicativo começa a ser compilado, ou seja o o executável do aplicativo começa a ser gerado.

3º agora para finalizar digite:

# make install

Esse comando faz com que o programa compilado seja instalado em suas devidas pastas.
obs: $ é seu usuário e # é o root

Esses comandos podem ser resumidos com os comandos:
./configure && make && make install ou ./configure ; make ; make install

2.c - Outras opções que deixam a instalação bem flexível ao que você deseja.

./configure --enable-biblioteca -- essa opção é interessante, quando o aplicativo permite que possa ser incluido nele uma funcionalidade.
ex1: instalando o aplicativo wterm - terminal do linux
# ./configure --enable-transparency
com essa opção, você esta habilitando a transparência do terminal wterm.Mas essas funcionalidades, são os programadores que incluem, por isso é muito importante que você leia o arquivo README e INSTALL do aplicativo.Nele os desenvolvedores dizem a verdadeira forma de instalá-los.
# ./configure --with-aplicativo1-dir=/usr/local/aplicativo1 --sysconfdir=/etc/aplicativo1
Crie o diretório /usr/local/aplicativo1 e /etc/aplicativo1 esse comando roda o script de configuracao com o prefix do aplicativo1 em /usr/local/aplicativo1, ou seja, ele vai ser instalado nesse diretório.E sysconfdir instala os arquivos de configuração em /etc/aplicativo1)

Para outras opções use o comando:
./configure --help

3 - Instalando, removendo e atualizando aplicativos no Debian.
O debian conta com uma boa ferramenta para gerenciamento de pacotes no Linux, clique aqui... para mais detalhes..

Distribuição: Baseadas no Redhat, Slackware e Debian.
autor: NightNux - Fernando Seno - e-mail: nando_seno@ibest.com.br

http://www.linuxnarede.com.br/artigos/fullnews.php?id=203