Quando falamos em programação para Web, normalmente pensamos em linguagens como Perl, Java, PHP, mas raramente imaginamos C como uma linguagem para desenvolver aplicativos web. E esse chega a ser um fato curioso, visto os primeiros CGI's terem sido desenvolvidos em C.

Se a linguagem C serve para programação Web, por que não ouvimos falar de páginas web feitas nessa linguagem? Há diversos motivos, um deles é a facilidade de se programar em linguagens mais específicas para web como PHP ou mesmo linguagens com recursos como coletor de lixo (garbage collector) (dentre elas o Java), ao compararmos ao desenvolvimento usando C. Outro motivo é o desconhecimento, por parte de muitos programadores de Web, do que está por debaixo dos panos ao desenvolver um programa para web, contudo para desenvolver em C para Web precisamos estar atentos a isso.

Então, visto desse lado, há alguma vantagem em desenvolver em C as páginas de web? Sim, há muitas, mas as três mais importantes são:

  1. Desempenho – programas compilados em C costumam ser muito mais performáticos de que programas em linguagens interpretadas como PHP e Perl (obviamente se esses estiverem bem desenvolvidos)
  2. Consumo de memória – programas bem escritos em C consomem muito menos memória de que programas compilados e de que programas que precisem de uma máquina virtual para executá-los
  3. Conhecimento do processo que existe ao fazer uma requisição web – mesmo se tu não utilizares CGI's em C no dia a dia, teu código tenderá obter melhora significativa de qualidade.

Quando desenvolvemos CGI's em C, costumamos utilizar bibliotecas CGI para facilitar muitas das tarefas comuns, mas neste artigo trabalharemos sem usar as mesmas, assim a base de programação CGI em C será mais forte e, nos próximos artigos, quando aprendermos sobre uma biblioteca especializada para CGI em C++ (Wt), a compreensão do que está por detrás de cada método fará com que apreciemos mais seu uso.

Os requisitos para nosso desenvolvimento são um compilador C (os exemplos usarão o gcc, mas nada impede que uses outro compilador de tua preferência) e um servidor web como o Apache.


            #include <stdio.h>
            
            int main(int charc, char *charv[])
            {
              printf("Content-type: text/plain\n\n");
              printf("Ola, Mundo!");
            
              return 0;
            }
            

Se prestares atenção verás que não há nada diferente de um programa C tradicional. O primeiro comando printf contém o segredo para que este programa funcione como uma página CGI: toda página gerada por um CGI e enviada para o browser deve inicializar com uma linha indicando o tipo de documento que será enviado. Isso é feito com a cláusula “Content-type”, e o valor que atribuimos neste caso foi “text/plain”, ou seja, é um arquivo de texto simples apenas.

Logo após imprimir esta linha faz-se necessário seguir uma linha em branco, por isso temos duas vezes o caracter de nova linha no final dessa string (“\n\n”). Logo após, basta mandarmos imprimir nosso “Ola, Mundo!” e está feito. Não há truques na compilação, é uma compilação padrão em C: gcc -o hello hello.c

Teremos o nosso CGI compilado, agora somente falta colocar o mesmo na pasta CGI de seu servidor web. No meu caso é a pasta /var/www/cgi-bin/, mas em outros sistemas linux pode estar em diferentes pastas (no debian é na pasta /usr/lib/cgi-bin/). Para tanto, basta fazer uma cópia do nosso arquivo compilado para essa pasta e, supondo o servidor web estar ativo, podemos entrar em um browser e digitar:

http://<<endereco_IP>>/cgi-bin/hello

Onde <<endereco_IP>> deve ser substituido pelo IP de teu servidor (pode ser localhost se estiveres abrindo a página na mesma máquina na qual encontra-se o servidor web).

Nesse caso deve ver uma página onde estará escrito “Olá, Mundo!” apenas.