Subroutines, programas de exemplo e bibliotecas
Este tópico fornece informações sobre o que são subroutines, como utilizá-las, e onde elas são armazenadas.
Subroutines são armazenadas em bibliotecas para conservar o espaço de armazenamento e para tornar o processo de ligação do programa mais eficiente. Uma biblioteca é um arquivo de dados que contém cópias de uma série de arquivos individuais e informações de controle que permite que eles sejam acessados individualmente. As bibliotecas estão localizadas nos diretórios /usr/ccs/lib e /usr/lib . Por convenção, a maioria deles tem nomes do formulário libname.a onde name identifica a biblioteca específica.
Todas as instruções de inclusão devem estar perto do início do primeiro arquivo que está sendo compilado, geralmente na seção de declarações antes de main (), e deve ocorrer antes de usar qualquer funções da biblioteca. Por exemplo, use a seguinte instrução para incluir o arquivo stdio.h :
#include <stdio.h>Não é necessário fazer nada especial para usar sub-rotinas da Biblioteca C Padrão (libc.a). O comando cc procura automaticamente esta biblioteca por subroutines que um programa precisa. No entanto, se você usa subroutines de outra biblioteca, você deve dizer ao compilador para pesquisar essa biblioteca. Se o seu programa usa subroutines da biblioteca libname.a, compile seu programa com a bandeira -lname (lowercase L). O exemplo a seguir compila o programamyprog.c, que usa sub-rotinas da biblioteca libdbm.a :
cc myprog.c -ldbmVocê pode especificar mais de uma sinalização -l (minúsestoes L). Cada sinalização é processada na ordem especificada.
Se você estiver usando uma sub-rotina que está armazenada na Biblioteca de Compatibilidade de Berkeley, ligue-se à biblioteca libbsd.a antes da ligação à biblioteca libc.a , conforme mostrado no exemplo a seguir:
cc myprog.c -lbsdQuando ocorre um erro, muitas sub-rotinas retornam um valor de -1 e definem uma variável externa chamada errno para identificar o erro. O arquivo sys/errno.h declara a variável errno e define uma constante para cada uma das possíveis condições de erro.
Nesta documentação, todas as chamadas do sistema são descritas como sub-rotinas e são resolvidas a partir da biblioteca libc.a A interface de programação para chamadas de sistema é idêntica à de subroutines. No que se refere a um programa de Linguagem C, uma chamada de sistema é meramente uma chamada subroutine. A diferença real entre uma chamada de sistema e uma subroutine é o tipo de operação que executa. Quando um programa invoca uma chamada de sistema, ocorre um switch de domínio de proteção para que a rotina chamada tenha acesso às informações privilegiadas do kernel do sistema operacional. A rotina então opera no modo kernel para executar uma tarefa em nome do programa. Dessa forma, o acesso às informações do sistema privilegiado é restrito a um conjunto predefinido de rotinas cujas ações podem ser controladas.
- A lista a seguir representa as rotinas wString obsoletas para o libc.ade 64 bits. Seus equivalentes de 64 bits libc.a correspondentes são incluídos. As rotinas para o libc.a de 32 bits podem ser localizadas na sub-rotina wstring
32 Bit only 64 Bit Equivalent wstrcat wcscat wstrchr wcschr wstrcmp wcscoll wstrcpy wcscpy wstrcspn wcscspn wstrdup Not available and has no equivalents in the 64 bit libc.a wstrlen wcslen wstrncat wcsncat wstrncpy wcsncpy wstrpbrk wcspbrk wstrrchr wcsrchr wstrspn wcsspn wstrtok wcstok - Todos os programas que manipulam caracteres multibyte, caracteres amplos ou informações específicas do locale devem chamar o subroutine setlocale no início do programa.
- A programação em um ambiente multiencadeado requer subroutines reentrantes para garantir a integridade dos dados.