Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

c:bibliotecas [2023/08/01 15:12] – criada mazieroc:bibliotecas [2023/08/01 17:11] (atual) – edição externa 127.0.0.1
Linha 1: Linha 1:
 +====== Bibliotecas para C ======
 +
 +{{ progc_bibliotecas.mkv |Video desta aula}}
 +
 +{{ books.png|https://www.flaticon.com/authors/freepik}}Existe uma grande quantidade de bibliotecas disponíveis para a linguagem C, algumas delas mais genéricas e muitas outras construídas para áreas específicas, como o processamento de imagens, serviços de rede, etc.
 +
 +Esta página visa apresentar algumas bibliotecas para C que podem ser úteis para o desenvolvimento de programas mais complexos.
 +
 +===== Uso geral =====
 +
 +=== LibC ===
 +
 +A biblioteca padrão C ([[https://en.wikipedia.org/wiki/C_standard_library|C Standard Library]]) ou simplesmente LibC contém a maioria das funções básicas da linguagem C como ''printf'', ''scanf'', ''fopen'' e muitas outras. 
 +
 +A LibC oferece funções para:
 +
 +  * interface com o sistema operacional
 +    * alocação de memória (''malloc'', ...)
 +    * acesso a arquivos (''fopen'', ...)
 +    * acesso a //streams// (''printf'', ''scanf'', ''getchar'', ...) 
 +  * manipulação de caracteres e strings (normais ou multi-bytes)
 +  * ordenação e busca (''qsort'', ''bsearch'')
 +  * operações matemáticas (exponenciação, raiz, trigonometria, logaritmos)
 +  * conversões numéricas
 +  * geração de números aleatórios
 +  * operações com números complexos
 +  * manipulação de datas e horas
 +  * ...
 +
 +Uma extensão da biblioteca padrão C específica para sistemas operacionais no padrão POSIX for definido como [[https://en.wikipedia.org/wiki/C_POSIX_library|POSIX C Library]]. Além das funções da LibC padrão, ela também implementa operações específicas de sistema operacional, como:
 +
 +  * operações de rede
 +  * tratamento de sinais e eventos do SO
 +  * operações de entrada/saída assíncronas
 +  * filas de mensagens
 +  * semáforos
 +  * //threads//
 +  * ...
 +
 +Como o próprio nome diz, a biblioteca **padrão** está disponível por default na grande maioria dos sistemas operacionais que suportam a linguagem C. Sistemas UNIX como o Linux e o FreeBSD usam geralmente a implementação da LibC construída pelo projeto GNU, chamada [[https://www.gnu.org/software/libc/libc.html|GNU C Library]], ou simplesmente GLibC.
 +
 +A GLibC implementa as funcionalidades da LibC padrão e da extensão POSIX, mas traz também um grande conjunto de extensões que não estão disponíveis em outras implementações. Por isso, ao desenvolver programas que devem funcionar em mais de uma plataforma, deve-se verificar se as funções utilizadas são suportadas em todas elas.
 +
 +===== Estruturas de dados =====
 +
 +=== GLib ===
 +
 +A [[https://developer.gnome.org/glib/|GLib]] é uma biblioteca de uso geral com um grande conjunto de funcionalidades para a construção de estruturas de dados (listas, árvores, tabelas //hash//, etc.). A biblioteca GLib é muito usada para a construção de aplicações em Linux, sobretudo no ambiente gráfico Gnome. Todavia, pode ser compilada e usada em outras plataformas, pois não tem relação com a interface gráfica.
 +
 +Páginas com mais informações sobre a GLib:
 +
 +  * [[https://en.wikipedia.org/wiki/GLib|GLib na Wikipedia]]
 +  * [[http://www.ibm.com/developerworks/linux/tutorials/l-glib/|tutorial da IBM]]
 +
 +=== SGLib ===
 +
 +Outra opção para a construção de estrutura de dados usuais, como listas e árvores, é a biblioteca [[http://sglib.sourceforge.net|SGLib - A Simple Generic Library for C]].
 +
 +===== Interface gráfica =====
 +
 +=== SDL ===
 +
 +A biblioteca SDL ([[https://www.libsdl.org|Simple DirectMedia Layer]]) oferece acesso à interface gráfica do computador. Estas funcionalidades são oferecidas:
 +
 +  * abertura de janelas
 +  * operações de desenho (linhas, áreas, etc)
 +  * operações de áudio
 +  * leitura de posição e eventos do mouse
 +  * leitura do teclado
 +  * Uso de fontes de caracteres
 +
 +Esta biblioteca está disponível para C e C++ em várias plataformas, como Linux, Windows, Android e iOS. Mais informações sobre SDL podem ser obtidas em:
 +
 +  * https://www.libsdl.org
 +  * https://en.wikipedia.org/wiki/Simple_DirectMedia_Layer
 +  * http://lazyfoo.net/SDL_tutorials/index.php
 +
 +=== Allegro ===
 +
 +A biblioteca [[http://liballeg.org/|Allegro]] permite a manipulação de gráficos simples e áudio, sendo bem adaptada para a construção de jogos 2D. É uma biblioteca mais simples (mais limitada) que SDL, mas boa para projetos menores.
 +
 +Algumas de suas características:
 +
 +  * multiplataforma: Linux, Windows, MacOS, Android, iOS
 +  * pode ser usada em C e outras linguagens
 +  * usa aceleração gráfica (através de OpenGL ou DirectX)
 +  * manipulação de áudio e vídeo
 +
 +===== Interface de usuário =====
 +
 +=== NCurses ===
 +
 +A biblioteca [[https://en.wikipedia.org/wiki/Ncurses|NCurses]] permite a manipulação do terminal de texto, oferecendo as seguintes funcionalidades:
 +
 +  * posicionamento do cursor
 +  * leitura não-bloqueante do teclado
 +  * leitura de teclas especiais (setas, teclas de função)
 +  * manipulação de cores
 +  * criação de janelas, menus e forms em modo texto
 +  * leitura de eventos do mouse
 +
 +Estas páginas oferecem informações adicionais sobre a biblioteca NCurses:
 +
 +  * [[http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/|Ncurses Programming Howto]]
 +  * [[http://invisible-island.net/ncurses/ncurses-intro.html|Writing Programs with Ncurses]]
 +  * [[http://hughm.cs.ukzn.ac.za/~murrellh/os/notes/ncurses.html|Ncurses Programming Guide]]
 +  * Exemplos do ncurses no Linux, em ''/usr/lib/ncurses/examples/'' (instalar o pacote ''ncurses-examples'')
 +  * [[http://invisible-island.net/ncurses/ncurses-examples.html|Código-fonte]] do pacote ''ncurses-examples'' disponível no Debian e derivados (Ubuntu, Mint, etc).
 +
 +=== GTK ===
 +
 +A biblioteca GIMP ToolKit foi desenvolvida para o ambiente de desktop Gnome (Linux). Ela permite a construção de janelas gráficas com elementos de interface do usuário (janelas, menus, botões, etc).
 +
 +  * [[https://www.gtk.org]]
 +  * [[https://en.wikipedia.org/wiki/GTK]]
 +  * Tutorial GTK: [[https://developer.gnome.org/gtk-tutorial/stable]]
 +  * Construtor de interfaces: [[https://glade.gnome.org]]
 +
 +===== Armazenamento =====
 +
 +=== GDBM ===
 +
 +A biblioteca GDBM ([[http://www.gnu.org.ua/software/gdbm/|GNU dbm]]) permite criar bases de dados simples em disco, estruturadas na forma de pares //chave/valor//. São oferecidas funções para criar/destruir bases e criar/remover/buscar registros em uma base.
 +
 +A estrutura interna da base permite operações de busca/inserção muito rápidas.
 +
 +=== SQLite ===
 +
 +Quando um programa precisa armazenar e manipular um grande volume de dados estruturados, pode fazer uso da biblioteca [[http://www.sqlite.org|SQLite]]. Esta biblioteca constrói a abstração de uma base de dados relacional no padrão SQL em um arquivo em disco. A maioria das operações típicas de DBMS relacionais, como criação de tabelas, buscas, fusões, etc são suportadas pela biblioteca.
 +
 +SQLite é a biblioteca usada para armazenamento de dados do usuário no ambiente Android e nos navegadores web Firefox e Chrome.
 +
 +===== Ciência =====
 +
 +=== GSL ===
 +
 +A biblioteca GSL ([[https://www.gnu.org/software/gsl|GNU Scientific Library]]) oferece mais de 1000 funções para operações matemáticas de alto desempenho, como:
 +
 +  * números complexos
 +  * raízes de polinômios
 +  * álgebra linear
 +  * equações diferenciais
 +  * transformadas
 +  * estatística
 +  * integração (Monte Carlo, etc)
 +  * otimização (mínimos quadrados, etc)
 +
 +=== OpenCV ===
 +
 +A biblioteca OpenCV ([[http://opencv.org|Open Computer Vision]]) foi desenvolvida pela Intel para o processamento de imagens e vídeos, trazendo uma grande quantidade de funções com desempenho otimizado para o tratamento de fotografias, vídeos capturados por câmeras, etc.