C


Demorou, vou assumir, mas finalmente eu programei mais uma estrutura de dados simples, a árvore. Vou preparar uma explicação sobre o que é uma árvore em computação (essa pode ser um pouco complexa) e assim que eu tiver eu posto aqui, mas por enquanto vocês podem ver o código no svn (http://svn.geekvault.org/c/trees)

Have fun.

Certo dia eu estava conversando com um amigo meu sobre C e ele me falou que a coisa que ele mais odiava era ter que tomar cuidado com a ordem dos include que ele fazia quando iniciava um projeto em C. Ora, vamos pensar um pouco, se você incluir duas vezes o cabeçalho stdio.h por exemplo, em dois arquivos diferentes, e incluir os dois, não da erro certo?
(more…)

Quem nunca teve o problema clássico de ter que armazenar uma quantidade X de valores, sem limite máximo e com buscas, remoção e adição em qualquer lugar de forma rápida? Pois bem as listas estão ai exatamente para isso. Claro, poderíamos criar um vetor com um número X, e caso precisa-se, utilizaríamos realloc() para aumentar o vetor. Porém, qualquer coisa que fizéssemos com um vetor (ordernar, busca, remoção, adição) é muito custosa, uma lista ligada nos permite fazer isso de forma rápida, customizáda, e econômica. Vamos explicar aqui a lista duplamente ligada, uma das mais completas, porém vamos mostrar também a teoria de suas variações (lista ligada e lista circular).
(more…)

Uma das coisas mais importantes e pesquisada na programação é a representação de dados no computador, essa área tem o nome de estrutura de dados, sendo uma das áreas principais no estudo da programação para computadores. Existem vários tipo de estrutura de dados clássicos, cada um com sua utilização, hoje vamos estudar como funciona a Pilha.
(more…)

Pessoal, eu não morri não, isso se chama final de semestre na faculdade. Mas aos poucos as coisas ficam mais tranquilas.
Até lá, fiquem com a documentação do servidor Bucket Sort, eu demorei para lançar esse código pois era para um trabalho da faculdade, mas agora, ainda não 100% pronto, mas, lá está, assim que eu tiver tempo eu explico com calma a idéia ok? A documentação está aqui.

Ola, eu não esqueci de vocês não, apenas estou sem tempo com o final de semestre na faculdade. Então, para não deixar vazio, vamos mostrar como criar arquivos temporários em C.
Arquivos temporários são utilizados para uma vasta gama de utilidades, sendo que a mais comum é a comunicação entre processos. Isso mesmo, você leu direito, para dois processos se comunicarem é mais do que comum utilizarmos arquivos temporários. Isso quer dizer, por exemplo, que a maravilhosa função pipe() nada mais é do que uma criação de arquivos temporários. (more…)

Bom, dito e feito, realmente para criar um servidor que não ficasse bloqueando no read(), ou no accept(), a melhor forma(talvez única) era utilizando fcntl(). O código está um pouco sujo ainda (por exemplo, temos o readLine.c e readLine.h que eu iria utilizar para ler do buffer, mas encontrei uma forma mais “rápida”), estamos lendo do pipe duas vezes, acredito que podemos ler apenas uma vez. Detalhes, detalhes bons para um patch que farei assim que possível. Junto com o patch, vou escrever e descrever esse código completamente, para que ninguém tenha dúvidas sobre o que o fork() faz, como fazer comunicação entre filho e pai e como trabalhar com funções não bloqueadoras, mas que deveriam ser (read() e accept() neste caso).
Enfim, façam o update do svn. A documentação já foi passada para a versão 1.0.

Mais um para a biblioteca de programas C, dessa vez é um servidor ECHO modificado que aceita até 10 conexões, concorrentes, ouve na porta 7777 e se receber a string “STOP SERVER” termina o servidor.
Mais tarde eu comento sobre esse programa, mas ele limpa todos os processos, e possui relativamente uma boa manutenção de memória. Fiz esse programa mais para demonstrar como funciona o fork() e como fazer um filho sair corretamente e o pai pegar essa saida e tratar caso ela seja um erro, nada mais clássico que um servidor.
Porém, como nada é perfeito, a função read() é do tipo locking, ou seja ela trava o programa até conseguir ler alguma coisa do buffer, travando o servidor. Ainda estou trabalhando em como arrumar isso, acredito que com fcntl() consigo resolver isso.
Quem quiser ver essa primeira versão, o svn está http://svn.geekvault.org/c/echo/.
A documentação você encontra aqui.

Outro dia, tentando fazer um servidor de bucket-sort, eu me deparei com um problema que a muito tempo eu não via, o quicksort. Pensei então, ai está uma coisa legal de colocar no servidor.
O quicksort é um problema clássico de ordenação em C. Estranhamente, esse algoritmo é ruim na teoria, mas para todos os casos práticos ele é um dos melhores.
Existem várias versões de quicksorte, mas a idéia é sempre a mesma, dividir um vetor, escolher um pivô, ordenar cada vetor em 3 vetores diferentes (menores que o pivô, maiores, e iguais), fazer novamente essa ordenação para cada vetor, e no final, concatenar tudo. Para saber mais (e de onde eu tirei o algorítmo em sí para fazer esse primeiro programa), de uma olhada na Wikipedia.
O programa está no SVN, em um novo repositório chamado C, onde o endereço é: http://svn.geekvault.org/c/quicksort. Para compilar, execute o clássico

./configure
make

Um detalhe sobre os programas feitos de agora em diante, eles sempre terão documentação feita utilizando Doxygen. O que isso quer dizer? Quer dizer que com aqueles poucos comentários que temos nos arquivos de cabeçalho (.h), temos toda a estrutura de documentação vista aqui, o que quer dizer que temos mais um domínio, http://docs.geekvault.org, que em breve terá uma index “bonitinha” com todas as documentações de todos os programas que eu fizer.

Bom, para hoje foram bastantes novidades ;). Em breve teremos outras versões mais complexas do quicksort, atualizadas no svn obviamente.

PS: Caso você não sabia como utilizar o svn, de uma olhada nesse post.

O que é um programa de computador? Antes de aprendermos a programar em uma linguagem que não seja algum tipo de script (.php, .bat ou shell script por exemplo), vamos discutir o que um programa de computador realmente faz. Em uma frase, um programa de computador é:

“Uma seqüência de instruções binárias para o processados executar e enviar resultado para o Kernel do Sistema Operacional, que irá então tratar o resultado como deve.”

(more…)

Next Page »