Escolar Documentos
Profissional Documentos
Cultura Documentos
n
d
i
c
e
A
Eu posso explicar isso para eles, mas eu no posso entender isso por eles.
Dan Rather, reprter americano
A.1 Recursividade
Na linguagem C, as funes podem chamar a si mesmas. A funo recursiva
se um comando no corpo da funo a chama. Recurso a habilidade que
uma funo tem de chamar a si mesma, ou seja, a tcnica que consiste sim-
plesmente em aplicar uma funo como parte da definio dessa mesma fun-
o.
Para uma linguagem de computador ser recursiva, uma funo deve poder
chamar a si mesma. Um exemplo simples a funo fatorial, que calcula o
fatorial de um inteiro. O fatorial de um nmero N o produto de todos os
nmeros inteiros entre 1 e N. Por exemplo, 3 fatorial (ou 3!) 1 * 2 *3 = 6.
Veja os exemplos:
int fatorialc( int n )
{
int t, f;
f = 1;
for( t = 1; t<=n; t++ )
f = f * t
return f;
}
Programa A.1
Verso iterativa.
240 Programando em C para Linux, Unix e Windows
int fatorialr( int n)
{
int t, f;
if( n == 1) return 1;
f = fatorialr(n-1)*n;
return f;
}
Programa A.2
A verso no-recursiva de fatorial deve ser clara. Ela usa um lao que execu-
tado de 1 a n e multiplica progressivamente cada nmero pelo produto mvel.
A operao de fatorial recursiva um pouco mais complexa. Quando fatori-
alr chamada com um argumento de 1, a funo devolve 1. Caso contrrio,
ela devolve o produto de fatorialr(n-1)*n. Para avaliar essa expresso, fa-
torialr chamada com n-1. Isso acontece at que n se iguale a 1 e as chama-
das funo comecem a retornar.
Calculando o fatorial de 2, a primeira chamada a fatorialr provoca uma se-
gunda chamada com o argumento 1. Essa chamada retorna 1, que , ento,
multiplicado por 2 (o valor original e n). A resposta ento 2.
Quando uma funo chama a si mesma, novos parmetros e variveis locais
so alocados na pilha e o cdigo da funo executado com essas novas vari-
veis. Uma chamada recursiva no faz uma nova cpia da funo; apenas os ar-
gumentos so novos. Quando cada funo recursiva retorna, as variveis locais
e os parmetros so removidos da pilha e a execuo recomea do ponto da
chamada funo dentro da funo.
A maioria das funes recursivas no minimiza significativamente o tamanho
do cdigo ou melhora a utilizao da memria. Alm disso, as verses recursi-
vas da maioria das rotinas podem ser executadas um pouco mais lentamente
que suas equivalentes iterativas devido s repetidas chamadas funo. De fa-
to, muitas chamadas recursivas a uma funo podem provocar um estouro da
pilha. Como o armazenamento para os parmetros da funo e variveis locais
est na pilha e cada nova chamada cria uma nova cpia dessas variveis, a pi-
lha pode provavelmente escrever sobre outra memria de dados ou de pro-
grama. Contudo, no necessrio se preocupar com isso, a menos que uma
funo recursiva seja executada de forma desenfreada.
A principal vantagem das funes recursivas ser possvel utiliz-las para criar
verses mais claras e simples de vrios algoritmos.
Ao escrever funes recursivas, deve-se ter um comando if em algum lugar
para forar a funo a retornar sem que a chamada recursiva seja executada.
Verso recursiva.
Chamada da funo.
Programas Avanados 241
Se no existir, a funo nunca retornar quando chamada (equivalente a um
loop infinito). Omitir o comando if um erro comum ao escrever funes re-
cursivas.
A.2 Ordenao
A.2.1 Bolha
A ordenao mais conhecida (e mais difamada) a ordenao bolha. Sua po-
pularidade vem do seu nome fcil e de sua simplicidade. Porm, uma das pi-
ores ordenaes j concebidas.
A ordeno bolha uma ordenao por trocas. Ela envolve repetidas compa-
raes e, se necessrio, a troca de dois elementos adjacentes.
Veja a verso mais simples do algoritmo bolha:
void bubble( char * item, int count )
{
register int a,b;
register char t;
for(a=1;a<count;a++)
for(b=count-1;b>=a;b--)
{
if(item[b-1] > item[b])
{
t = item[b-1];
item[b-1] = item[b];
item[b] = t;
}
}
}
Programa A.3
A ordenao bolha dirigida por dois loops. Dados que existem count ele-
mentos na matriz, o loop mais externo faz a matriz ser varrida count-1 vezes.
Isso garante, na pior hiptese, que todo elemento estar na posio correta
quando a funo terminar. O loop mais interno faz as comparaes e as trocas.
Essa verso da ordenao bolha pode ser utilizada para ordenar uma matriz de
caracteres em ordem ascendente. Por exemplo, o programa seguinte ordena
uma string.
Processo de troca
(ordenao).
Ponteiro para uma matriz de
caracteres a ser ordenada.
Nmero de elementos da matriz
a ser ordenada.
242 Programando em C para Linux, Unix e Windows
#include <stdio.h>
#include <string.h>
void bubble( char * item, int count );
void main(void)
{
char vetorb[]="3490bn09685lnv 3-49580bgojfog39458=9ugkj n098=526yh";
printf("\nAntes = [%s]", vetorb);
bubble(vetorb,strlen(vetorb)-1);
printf("\nDepois = [%s]", vetorb);
}
Programa A.4
Resultado do Programa A.4
Antes = [3490bn09685lnv 3-49580bgojfog39458=9ugkj n098=526yh]
Depois = [ -000023334445555668888999999==bbfggghjjklnnnoouvy]
A.2.2 Quicksort
A Quicksort, inventada e denomina por C.A.R. Hoare, considerada o melhor
algoritmo de ordenao de propsito geral atualmente disponvel. baseada
no mtodo de ordenao por trocas (mas muito superior em termos de de-
sempenho ordeno bolha).
A Quicksort baseada na idia de parties. O procedimento geral selecio-
nar um valor, chamado de comparando, e, ento, fazer a partio da matriz em
duas sees, com todos os elementos maiores ou iguais ao valor da partio de
um lado e os menores do outro. Este processo repetido para cada seo res-
tante at que a matriz esteja ordenada. Por exemplo, dada a matriz fedacb e
usando o valor d para a partio, o primeiro passo da Quicksort rearranja a
matriz como segue:
Incio f e d a c b
Passo 1 b c a d e f
Esse processo , ento, repetido para cada seo isso , bca e def. Assim, o
processo essencialmente recursivo por natureza e, certamente, as implemen-
taes mais claras da Quicksort so algoritmos recursivos.
O comparando central pode ser selecionado de duas formas. Escolh-lo alea-
toriamente ou selecion-lo fazendo a mdia de um pequeno conjunto de valo-
res da matriz. Para uma ordenao tima, deveria ser selecionado um valor
Programas Avanados 243
que estivesse precisamente no centro da faixa de valores. Porm, isso no f-
cil para a maioria dos conjuntos de dados. No pior caso, o valor escolhido est
em uma extremidade e, mesmo nesse caso, o algoritmo Quicksort ainda tem
um bom rendimento. A verso seguinte seleciona o elemento central da ma-
triz. Embora isso nem sempre resulte numa boa escolha, a ordenao ainda
efetuada corretamente.
void qs( char *item, int left, int right)
{
register int i,j;
char x,y;
i = left;
j = right;
x = item [ (left+right)/2 ];
do
{
while(item[i]<x && i<right) i++;
while(x<item[j] && j>left) j--;
if(i<=j)
{
y = item[i];
item[i] = item[j];
item[j] = y;
i++;
j--;
}
} while (i<=j);
if( left<j) qs(item, left, j);
if( i<right) qs(item, i, right);
}
Programa A.5
O prximo programa realiza a chamada da funo para ordenao.
#include <stdio.h>
#include <string.h>
void qs( char *item, int left, int right);
void main(void)
{
char vetorq[]="3490bn09685lnv 3-49580bgojfog39458=9ugkj n098=526yh";
printf("\nAntes = [%s]", vetorq);
qs(vetorq,0,strlen(vetorq)-1);
printf("\nDepois = [%s]", vetorq);
}
Programa A.6
Chamada recursiva...
Processo de troca
(ordenao).
Na primeira chamada, os parmetros
iniciais so os extremos da matriz.
244 Programando em C para Linux, Unix e Windows
Resultado do Programa A.6
Antes = [3490bn09685lnv 3-49580bgojfog39458=9ugkj n098=526yh]
Depois = [ -000023334445555668888999999==bbfggghjjklnnnoouvy]
A.3 Pesquisa
Bancos de dados existem para que, de tempos em tempos, um usurio possa
localizar o dado de um registro simplesmente digitando sua chave. H apenas
um mtodo para se encontrarem informaes em um arquivo (matriz) desor-
denado e um outro para um arquivo (matriz) ordenado.
Encontrar informaes em uma matriz desordenada requer uma pesquisa se-
qencial comeando no primeiro elemento e parando quando o elemento
procurado ou o final da matriz encontrado. Esse mtodo deve ser usado em
dados desordenados, mas tambm pode ser aplicado a dados ordenados. Se os
dados foram ordenados, pode ser utilizada uma pesquisa binria, o que ajuda
a localizar o dado mais rapidamente.
A.3.1 Pesquisa Seqencial
A pesquisa seqencial fcil de ser codificada. A funo a seguir faz uma pes-
quisa em uma matriz de caracteres de comprimento conhecido at que seja
encontrado, a partir de uma chave especfica, o elemento procurado:
int sequential_search( char * item, int count, char key )
{
register int t;
for( t = 0; t<count; t++)
if( key == item[t] )
return t;
return -1;
}
Programa A.7
Essa funo devolve o ndice da entrada encontrada se existir alguma; caso
contrrio, ela devolve 1.
A.3.2 Pesquisa Binria
Se o dado a ser encontrado se encontrar de forma ordenada, pode ser utiliza-
do um mtodo muito superior para encontrar o elemento procurado. Esse m-
todo a pesquisa binria que utiliza a abordagem dividir e conquistar. Ele
primeiro verifica o elemento central. Se esse elemento maior que a chave,
ele testa o elemento central da primeira metade; caso contrrio, ele testa o
No encontrou...
Procura do 1 elemento da matriz at
o ltimo....
...at encontrar o elemento.
Programas Avanados 245
elemento central da segunda metade. Esse procedimento repetido at que o
elemento seja encontrado ou que no haja mais elementos a testar.
Por exemplo, para encontrar o nmero 4 na matriz 1 2 3 4 5 6 7 8 9, uma
pesquisa binria primeiro testa o elemento mdio, nesse caso 5. Visto que
maior que 4, a pesquisa continua com a primeira metade ou 1 2 3 4 5. O e-
lemento central agora 3, que menor que 4, ento, a primeira metade
descartada. A pesquisa continua com 4 5. Nesse momento o elemento en-
contrado.
A seguir, demonstrada uma pesquisa binria para matrizes de caracteres.
int binary( char * item, int count, char key)
{
int low, high, mid;
low = 0;
high = count 1;
while( low <= high )
{
mid = (low+high)/2;
if( key<item[mid])
high = mid 1;
else if( key>item[mid])
low = mid + 1;
else
return mid;
}
return -1;
}
Programa A.8
Este programa pode ser adaptado para realizar pesquisas em qualquer tipo de
matriz (inteiros ou estruturas, por exemplo). Exemplo de utilizao das fun-
es.
#include <stdio.h>
#include <string.h>
int binary( char * item, int count, char key);
int sequential_search( char * item, int count, char key );
void qs( char *item, int left, int right);
void main(void)
{
int pos;
char vetors[]=".,/~2r=-dfx-950]gojftg394a8@ugkj n#26yh";
char vetorb[]=".,/~2r=-dfx-950]gojftg394a8@ugkj n#26yh";
Vai procurando nas metades at encontrar
o elemento.
Dividir para conquistar.
246 Programando em C para Linux, Unix e Windows
printf("\nMatriz desordenada [%s]", vetors );
printf("\nProcurando = sequencialmente");
pos = sequential_search(vetors, strlen(vetors),'=');
printf("\n= encontrado na posicao %d", pos );
printf("\nOrganizando a matriz.");
qs(vetorb, 0,strlen(vetorb)-1);
printf("\nMatriz ordenada [%s]", vetorb);
printf("\nProcurando = binariamente");
pos = binary(vetorb, strlen(vetorb),'=');
printf("\n= encontrado na posicao %d\n", pos );
}
Programa A.9
Resultado do Programa A.9
Matriz desordenada [.,/~2r=-dfx-950]gojftg394a8@ugkj n#26yh]
Procurando = sequencialmente
= encontrado na posicao 6
Organizando a matriz.
Matriz ordenada [ #,--./0223456899=@]adffggghjjknortuxy~]
Procurando = binariamente
= encontrado na posicao 17
A pesquisa binria exige que
a matriz esteja ordenada.
247
Ajuda
A
p
n
d
i
c
e
B
No desanimes. Freqentemente a ltima chave
do molho que abre a fechadura.
(Annimo)
B.1 Obtendo ajuda no Linux e Unix
O comando man a maneira mais rpida de obter informaes sobre um de-
terminado comando. Para visualizar o help on-line de todas as funes da lin-
guagem C no ambiente Linux e Unix, basta utilizar este comando para realizar
a consulta.
Exemplos:
o Para ver as opes de compilao do gcc: man gcc
o Para ver como funciona a funo fopen do C: man fopen
o Para ver como funciona o comando man: man man
B.2 Sees do Manual
Toda a documentao do sistema Linux e Unix est dividida em sees. Cada
seo responsvel pela documentao de assuntos correlatos. Segue uma
breve descrio das sees mais importantes:
o Seo 1 Contm os comandos destinados para o usurio comum. So
a maioria dos comandos existentes no Linux e Unix.
248 Programando em C para Linux, Unix e Windows
o Seo 2 O sistema Linux e Unix oferece um conjunto de funes que
podem ser chamadas dentro de programas C. Esta seo descreve cada
uma destas funes disponibilizadas para o programador C.
o Seo 3 a parte do manual que contm a documentao da biblio-
teca de funes disponibilizadas pelo compilador C padro da mqui-
na.
claro que existem outras sees. Atualmente, devido grande quantidade de
softwares e pacotes disponveis, existem vrias sees.
B.3 Diviso da Documentao
Cada documentao de um comando dividida em partes. De todas elas po-
demos destacar como as mais importantes:
o NAME (NOME) Contm o nome do comando e uma breve descrio
da funo do mesmo.
o SYNOPSIS (SINOPSE) Contm todas as sintaxes aceitas pelo comando,
bem como as opes aceitas e os argumentos esperados.
o DESCRIPTION (DESCRIO) Contm a descrio da funo do coman-
do, de forma detalhada. Inclui tambm a descrio de cada opo e
argumento esperado pelo comando.
o RETURN VALUE (VALOR DE RETORNO) Indica o cdigo de retorno (ou
retornos) de um comando.
o ERRORS (ERROS) Esta parte relata as possveis mensagens de erro que
o comando pode emitir durante a sua execuo. Pode sugerir correes
ou verificaes a serem feitas para sanar o problema.
o SEE ALSO (VEJA TAMBM) Na grande maioria dos casos, um coman-
do est ligado execuo de diversos outros comandos. Nesta parte do
manual so colocados todos os comandos citados no texto anterior ou
que tm alguma relao com o comando.
B.4 Exemplo de Utilizao
As funes da linguagem C esto todas documentadas no sistema, bastando
utilizar o comando man para ver o funcionamento das funes. Mas antes
preciso fazer algumas consideraes. Utilizando a funo open como exemplo:
$> man open
Obtm-se o seguinte trecho (aqui, modificado e comentado) na documentao
no sistema Linux:
Ajuda 249
OPEN(2) System calls
NAME
open, creat open and possibly create a file or device
SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int creat(const char *pathname, mode_t mode);
DESCRIPTION
The open() system call is used to convert a pathname into a file
descriptor (a small, non-negative integer for use in subsequent I/O
as with read, write, etc.). When the call is successful, the file
descriptor returned will be the lowest file descriptor not currently
open for the process. This call creates a new open file, not shared
with any other process. (But shared open files may arise via the
fork(2) system call.) The new file descriptor is set to remain open
across exec functions (see fcntl(2)). The file offset is set to the
beginning of the file.
RETURN VALUE
open and creat return the new file descriptor, or -1 if an
error occurred (in which case, errno is set appropri ately).
Note that open can open device special files, but creat cannot cre-
ate them use mknod(2) instead.
On NFS file systems with UID mapping enabled, open may
return a file descriptor but e.g. read(2) requests are denied with
EACCES. This is because the client performs open by checking the
permissions, but UID mapping is performed by the server upon read
and write requests.
Seo do manual. No caso, a funo open considerada
uma chamada de sistema (system call).
Os arquivos necessrios (includes) para
a funo funcionar.
Prottipo da funo. Quais os parmetros que a
funo recebe e o valor que ela retorna.
Descrio detalhada a respeito do
funcionamento da funo.
Descrio detalhada sobre o retorno da funo.
250 Programando em C para Linux, Unix e Windows
If the file is newly created, its atime, ctime, mtime fields
are set to the current time, and so are the ctime and mtime
fields of the parent directory. Otherwise, if the file is modified
because of the O_TRUNC flag, its ctime and mtime fields are
set to the current time.
ERRORS
EEXIST pathname already exists and O_CREAT and O_EXCL were used.
EISDIR pathname refers to a directory and the access re-
quested involved writing (that is, O_WRONLY or O_RDWR is set).
SEE ALSO
read(2), write(2), fcntl(2), close(2), link(2),
mknod(2), mount(2), stat(2), umask(2), unlink(2), socket(2),
fopen(3), fifo(4)
Descrio detalhada sobre os erros ocorridos e dicas de como
resolver o problema.
Outras funes relacionadas com esta. No caso, como foi consultada a
funo open (que trata de abertura de arquivos), o comando man
apresenta outras funes que tambm manipulam arquivos (o nmero
entre parnteses indica o nmero da seo do manual).
251
Compilando no Linux
A
p
n
d
i
c
e
C
No importante que voc entenda o que eu estou
fazendo ou por que voc est me pagando tanto dinheiro.
O importante que voc continue a fazer assim.
(Annimo)
ompilar transformar um arquivo legvel para o homem (chamado de c-
digo-fonte, source file em ingls) para um arquivo legvel para a mquina
(binrio, binary). Quem faz esse trabalho o compilador.
O compilador C/C++ padro no Linux o gcc. Muitas distribuies vm com o
gcc includo. O gcc um dos compiladores mais versteis e avanados existen-
tes. O gcc suporta todos os padres modernos do C atualmente usados, como
o padro ANSI C, assim como muitas extenses especficas do prprio gcc. Uti-
lizar o gcc simples. Vejamos alguns exemplos:
o Compila o programa hello.c e cria o binrio hello (opo o do gcc)
$> gcc hello.c o hello
o Compila dois programas (prog1.c e prog2.c) e cria o binrio programa.
$> gcc prog1.c prog2.c oprograma
o Compila o programa fat.c, gera o binrio fat e indica para o compilador
linkeditar a biblioteca matemtica junto com binrio (opo l do gcc).
$> gcc fat.c o fat lm
o Compila o programa def.c, gera o binrio def e cria a diretiva PLATA-
FORMA (opo D do gcc) com o valor Linux (veja o funcionamento no
captulo de Pr-compilao).
$> gcc def.c DPLATAFORMA=Linux odef
C
252 Programando em C para Linux, Unix e Windows
o Compila o programa inc.c, gera o binrio inc. A opo I indica o
caminho para os includes (headers) do especficos do projeto e a opo
L indica o caminho das bibliotecas especficas do projeto.
$> gcc inc.c I../includes L../libs lmylib o../bin/inc
o Compila o progr1.c e gera o binrio progr1. A opo O para otimi-
zao do cdigo gerado.
$> gcc O oprogr1 progr1.c
O libc (glibc) uma biblioteca usada por quase todos os programas do Linux;
o libjpeg uma biblioteca usada em todos os programas que trabalham com
o formato JPEG; e assim por diante. No sistema Linux essas bibliotecas so di-
vididas em dois pacotes: um para ser usado por programas j compilados
(glibc e libjpeg, por exemplo), e um para ser usado na compilao de pro-
gramas que dependem dele (glibc-devel e libjpeg-devel, por exemplo).
Portanto, para compilar programas mais complexos, ser necessrio ter esses
dois pacotes instalados.
Se o programa constitudo por vrios arquivos, e normalmente usam biblio-
tecas e header-files externos, ser necessrio compilar todos eles e junt-los
(link) corretamente. Para automatizar esse procedimento, usa-se o comando
make. Este comando l um arquivo chamado Makefile, onde estar o "roteiro"
necessrio para a compilao do programa. O objetivo bsico do make permi-
tir que seja construdo um programa em pequenas etapas. Se muitos arquivos
fontes compuserem o executvel final, ser possvel alterar um arquivo e re-
construir o executvel sem ter a necessidade de compilar os demais programas.
Para tal, necessrio criar um arquivo chamado Makefile.
O make pode ser composto de vrias linhas, cada um indicando como o
executvel deve ser construdo. Normalmente, existem dependncias entre
as linhas, indicando a ordem de execuo das linhas. A disposio das linhas
(entradas) dentro do arquivo Makefile no importa, pois o make ir desco-
brir qual a ordem correta. O make exige alguns cuidados para a criao do
arquivo:
o Sempre colocar uma tabulao no comeo de um comando, nunca es-
paos. No deve ser utilizada uma tabulao antes de qualquer outra
linha.
o O smbolo # (sustenido, tralha, cerquilha ou jogo da velha) indica um
comentrio na linha.
o Uma barra invertida no final de uma linha indica que ela ir prosseguir
na prxima linha. timo para comandos longos.
Compilando no Linux 253
Vejamos um exemplo:
install: all
mv manipconfig /usr/local
mv delbinario /usr/local
all: manipconfig delbinario
manipconfig: cria.o altera.o exclui.o consulta.o editor.o \
manipula.o principal.o
gcc L/home/laureano/libs o cria.o altera.o exclui.o \
consulta.o editor.o manipula.o principal.o
delbinario: del.c main.c
gcc o del.o main.o
cria.o: cria.c
gcc c cria.c
altera.o: altera.o
gcc c altera.c
exclui.o: exclui.c
gcc c exclui.c
consulta.o: cosulta.c
gcc c consulta.c
editor.o: editor.c
gcc c editor.c
manipula.o: manipula.c
gcc c manipula.c
principal.o: principal.c
gcc c principal
del.o: del.c
gcc c del.c
main.o: main.c
gcc c main.c
...que indica que estes arquivos binrios
devem existir.
Para o binrio manipconfig ser criado....
... necessrio que os arquivos
objetos existam.
Indica que o comando continua
na prxima linha.
Para o objeto ser gerado, necessrio compilar o
programa antes. A opo c do gcc indica que
somente para compilar (gerar o arquivo .o).
Aqui sempre deve vir precedido de uma tabulao (TAB).
Para executar os comandos do sistema
operacional, necessrio verificar a
precedncia all...
254 Programando em C para Linux, Unix e Windows
Os comandos do arquivo Makefile anterior seriam equivalentes aos seguintes
comandos (se todos fossem digitados):
$> gcc c main.c
$> gcc c del.c
$> gcc c principal
$> gcc c manipula.c
$> gcc c editor.c
$> gcc c consulta.c
$> gcc c exclui.c
$> gcc c altera.c
$> gcc c cria.c
$> gcc del.o main.o o delbinario
$> gcc L/home/laureano/libs cria.o altera.o exclui.o consulta.o
editor.o manipula.o principal.o o manipconfig
$> mv manipconfig /usr/local
$> mv delbinario /usr/local
Para maiores informaes sobre a utilizao e opes dos comandos gcc e
make, veja o manual on-line (help) do sistema Linux.
255
Utilizando o LCC-Win32
A
p
n
d
i
c
e
D
Quem pode faz. Quem no pode ensina. Quem no sabe ensinar vira chefe.
(Annimo)
LCC-Win32 um compilador C para Windows desenvolvido por Jacob Na-
via, que por sua vez foi baseado no compilador C desenvolvido por Dave
Hanson e Chris Fraser.
D.1 Instalao
Ele pode ser baixado gratuitamente em http://www.cs.virginia.edu/~lcc-win32/.
Sua instalao simples e rpida, bastando dar um duplo clique no executvel
lccwin32.exe. Os prximos passos iro auxili-lo a realizar a instalao.
1 Passo Clicar (duplo clique) no executvel do LCC-Win32 (lccwin32.exe).
O
256 Programando em C para Linux, Unix e Windows
2 Passo Confirmar a instalao. Basta clicar com o mouse no boto Sim ou
Yes (depende da lngua utilizada no sistema operacional).
3 Passo A instalao do LCC-Win32 do tipo NNF (next, next and finish).
Basta clicar com o mouse no boto Next.
Utilizando o LCC-Win32 257
4 Passo Licena de uso. A licena diz que o software pode ser utilizado para
fins pessoais ou didticos. Clique em Yes (Sim) para aceitar os termos de uso e
continuar com a instalao.
5 Passo O instalador avisa os procedimentos que sero realizados a seguir.
Clique em Next.
258 Programando em C para Linux, Unix e Windows
6 Passo O diretrio padro para instalao c:\lcc. Se quiser escolher outro
diretrio ou disco rgido (D:, por exemplo) para instalao, basta selecionar no
browser apresentado. O programa de instalao indica qual o espao necessrio
para a instalao. Aps a escolher o local da instalao, clique em Next.
7 Passo Selecionar em qual grupo do Windows o programa ser includo. A
sugesto do programa criar um grupo novo (lcc-win32). Ser este grupo
que ir aparecer no menu do Windows.
Utilizando o LCC-Win32 259
8 Passo Aps a configurao da instalao (conforme passos anteriores), a
instalao ir realmente ocorrer aps voc clicar em Install.
9 Passo Processo de instalao. Dependendo do seu computador, esta ope-
rao pode demorar at 5 minutos... basta aguardar o trmino...
260 Programando em C para Linux, Unix e Windows
10 Passo Continuando o processo de instalao. O programa est criando as
bibliotecas do sistema.... basta aguardar o trmino da operao.
11 Passo Notificao do trmino da gerao das bibliotecas. Clicar em OK.
Utilizando o LCC-Win32 261
12 Passo Programa instalado! Basta clicar em Finish para finalizar o pro-
grama.
Agora voc j pode utilizar o programa para criar, compilar e executar os seus
programas.
D.2 Criando Projetos no LCC-Win32
O que vem a ser um projeto em C? Voc provavelmente j deve saber que um
compilador um programa que transforma um arquivo contendo um progra-
ma (arquivo fonte) escrito em uma linguagem de alto nvel, como o C, para
uma linguagem que a mquina capaz de "entender", ou programa execut-
vel.
A linguagem C permite que um programa seja decomposto em diversos mdu-
los, onde cada mdulo pode ficar armazenado em arquivos diferentes. Isso
permite que, principalmente em projetos grandes, um programa possa ser de-
senvolvido por uma equipe de programadores, cada um trabalhando em um
mdulo diferente do programa. O compilador deve aceitar, portanto, diversos
arquivos de entrada para gerar um arquivo executvel. comum combinar
mdulos segundo alguma funcionalidade, criando-se bibliotecas de funes,
para que possam ser reutilizados em outros programas. Uma biblioteca do C
que vai ser freqentemente utilizada a stdio.h, que contm vrias funes
para a entrada e sada de dados.
262 Programando em C para Linux, Unix e Windows
Com a utilizao de diversos arquivos (vrias centenas ou mais para projetos
muito grandes) que podem conter dependncias mtuas (partes de um mdulo
que chamam partes de outro mdulo e vice-versa), o compilador deve ser instru-
do sobre quais arquivos fontes ele deve compilar, em que ordem, qual o nome
dos executveis a serem gerados etc. Essa informao tipicamente armazenada
em outro arquivo, chamado Makefile. Makefiles possuem uma sintaxe bem res-
trita e podem se tornar bastante complicados. Para simplificar esse processo, o
ambiente do LCC-Win32 (o WEdit) oferece uma forma mais intuitiva de manter
a informao necessria para compilar um programa, que so os projetos.
Toda vez que voc for escrever um novo programa no LCC-Win32 , voc dever
criar um novo projeto. Nesse projeto voc poder incluir arquivos, modificar
propriedades da aplicao e at controlar a verso do seu programa, que o aju-
da a manter uma documentao sobre as mudanas ocorridas ao longo do de-
senvolvimento do projeto. Veja o manual do LCC-Win32 para maiores detalhes.
Agora que voc sabe o que significa um projeto, voc dever entender melhor
o procedimento exigido para a criao de um programa no LCC-Win32.
D.2.1 Criando um projeto
1 Passo No item Project do menu do LCC-Win32 selecione a opo Create...
Utilizando o LCC-Win32 263
2 Passo Especifique o nome do projeto e o local onde ele vai ficar armaze-
nado. Depois clique em Create. Para fins de aprendizado, vamos trabalhar
somente com aplicaes de console (Console Aplication), ou seja, que iro
em uma tela parecida com a do sistema DOS.
3 Passo O LCC-Win32 pode criar um esqueleto bsico para voc de vrias a-
plicaes, bastando s complementar as rotinas e funes. No nosso caso, cli-
que em No.
264 Programando em C para Linux, Unix e Windows
4 Passo Agora temos que selecionar um arquivo que conter o nosso pro-
grama-fonte. Se voc no tiver criado este arquivo ainda, clique em Cance-
lar. Este tutorial assume que voc ainda no tem um programa pronto.
5 Passo O LCC-Win32 ir demonstrar uma tela de administrao de arquivos
do seu projeto. Nesta tela voc poder incluir ou excluir arquivos do projeto.
Como ainda no temos um arquivo, clique em Cancel.
Utilizando o LCC-Win32 265
6 Passo O LCC-Win32 pergunta se voc tem certeza que quer gerar um pro-
jeto vazio (sem arquivos fontes). Confirme a operao clicando em Sim.
7 Passo Agora vamos configurar alguns itens da compilao do programa.
Esta a tela onde voc ir definir os #defines da aplicao em tempo de exe-
cuo. Clique em Avanar.
266 Programando em C para Linux, Unix e Windows
8 Passo Nesta tela voc configura onde ser gerado o seu programa executvel e
eventuais arquivos que devem ser linkados ao seu programa. Clique em Avanar.
9 Passo Aqui voc configura a fonte das aplicaes e os parmetros que se-
ro passados ao seu programas (recebidos na funo main, normalmente como
argv e argc). Clique em Concluir.
Parabns. O seu projeto est concludo. Agora temos que criar um programa
para incluir no projeto, compilar e executar.
Utilizando o LCC-Win32 267
D.3 Criando um Programa e Compilando
1 Passo Na opo File do menu, selecione New e depois File para criar
um novo programa-fonte em C.
2 Passo Informe o nome do programa. No nosso caso ser o hello.c.
IMPORTANTE: Lembre-se sempre de colocar a extenso .c nos arquivos-fontes.
268 Programando em C para Linux, Unix e Windows
3 Passo Salve o seu programa. Voc pode pressionar CTRL+S ou ir at a op-
o File do menu e depois em Save.
4 Passo Agora temos que incluir o novo programa no projeto criado ante-
riormente. V at a opo Project do menu e selecione Add/Delete files...
Utilizando o LCC-Win32 269
5 Passo Selecione o arquivo correspondente ao seu programa e clique em
Abrir.
6 Passo O LCC-Win32 ir demonstrar uma tela de administrao de arquivos
do seu projeto. Nesta tela voc poder incluir ou excluir arquivos do projeto.
Clique em OK para confirmar o novo arquivo no projeto.
270 Programando em C para Linux, Unix e Windows
7 Passo Agora s compilar o programa e, se estiver tudo certo, execut-lo.
Para compilar, voc pode pressionar F9 ou ir at a opo Compiler do menu
e selecione Make. Para executar o programa pressione CTRL+F5 ou v at a
opo Compiler do menu e selecione Execute. Se o seu programa contiver
algum erro de sintaxe, ir aparecer em uma janela abaixo a linha e o erro cau-
sado.
8 Passo O seu programa est executando. Parabns...
271
Guia de Referncia
das Funes
A
p
n
d
i
c
e
E
Autodidata: ignorante por conta prpria.
Mrio Quintana, poeta brasileiro
linguagem de programao C possui um enorme conjunto de funes.
Muitas das funes disponveis so especficas de um fabricante ou de um
sistema operacional. Este guia apresenta a referncia das funes mais utiliza-
das nos sistemas Linux e Unix (montada a partir do manual do sistema). Ela
traz o prottipo da funo (sua assinatura) com seus parmetros, os arquivos
cabealhos necessrios para o funcionamento e o retorno da funo. A finali-
dade desta seo listar as funes existentes (e seu significado) para facilitar
a busca do programador. Para obter maiores informaes referentes s fun-
es (forma de uso, exemplos etc.) necessrio consultar o manual do sistema
(man).
Para a montagem deste apndice foram consultados os manuais do sistema
Unix AIX (IBM) e Linux (Fedora). Algumas chamadas podem ser diferentes de
sistema para sistema. Nas pesquisas realizadas foi detectado que algumas
chamadas tm a mesma funo mas a forma diferente (alguns casos foram lis-
tados duplicados). Recomenda-se sempre consultar o manual on-line do seu
sistema (sistemas Linux so independentes da distribuio, assim como siste-
mas Unix tambm o so).
Sempre que uma funo resultar em erro, verifique a varivel errno.
A
272 Programando em C para Linux, Unix e Windows
Notaes utilizadas nesta seo:
o > Maior que
o < Menor que
o Igual
o != Diferente de
o # Quantidade
_exit Nvel: 2
Prottipo: void _exit(int status);
Retorno: No tem retorno. Header: #include <unistd.h>
Descrio: Termina o programa imediatamente, ou seja, o programa termina-
do e o controle passa automaticamente para o kernel do sistema
operacional.
abort Nvel: 3
Prottipo: void abort(void);
Retorno: No tem retorno. Header: #include <stdlib.h>
Descrio: Causa o trmino de um programa e causa o sinal SIGABRT.
abs Nvel: 3
Prottipo: int abs(int num);
Retorno: Nmero absoluto. Header: #include <stdlib.h>
Descrio: Devolve o nmero absoluto de um nmero.
accept Nvel: 2
Prottipo: int accept(int s, struct sockaddr *addr, socklen_t
*addrlen);
Retorno: 0 se OK
-1 se houve erro
Header: #include <sys/types.h>
#include
<sys/socket.h>
Descrio: Aceita uma conexo em um socket. usada com 'sockets' baseados
em conexo do tipos (SOCK_STREAM, SOCK_SEQPACKET e
SOCK_RDM)
access Nvel: 2
Prottipo: int access(const char *pathname, int mode);
Retorno: O se ok
-1 se houve algum erro
Header: #include <unistd.h>
Descrio: Verifica as permisses de acesso de um arquivo.
acos Nvel: 3
Prottipo: double acos(double num);
Retorno: Arco co-seno ou erro de
domnio.
Header: #include <math.h>
Descrio: Retorna arco co-seno do nmero, num deve estar entre 1 e 1.
Guia de Referncia das Funes 273
alarm Nvel: 2
Prottipo: unsigned int alarm(unsigned int seconds);
Retorno: 0 ou nsegundos setados
anteriormente.
Header: #include <unistd.h>
Descrio: Envia o sinal SIGALRM para o processo aps ter passado os segun-
dos setados.
alloca Nvel: 3
Prottipo: char *alloca(int size);
Retorno: Ponteiro para a memria
ou NULL em caso de erro.
Header: #include <stdlib.h>
Descrio: Alocao dinmica de memria. A memria liberada
automaticamente ao trmino da funo que a chamou, portanto a fun-
o free no deve ser chamada para liberar o espao de memria.
asctime Nvel: 3
Prottipo: char *asctime(const struct tm *tm);
Retorno: Ponteiro para string con-
tendo a data/hora.
Header: #include <time.h>
Descrio: Retorna a data em formato string especificada pelo contedo da
struct tm.
asin Nvel: 3
Prottipo: double asin(double num);
Retorno: Arco seno ou erro de do-
mnio.
Header: #include <math.h>
Descrio: Retorna arco seno do nmero, num deve estar entre 1 e 1.
assert Nvel: 3
Prottipo: void assert (int expression);
Retorno: No tem retorno. Header: #include <assert.h>
Descrio: Abortar a execuo do programa se a premissa for falsa.
atan Nvel: 3
Prottipo: double atan(double num);
Retorno: Arco tangente. Header: #include <math.h>
Descrio: Retorna arco tangente do nmero.
atexit Nvel: 3
Prottipo: int atexit(void (*function)(void));
Retorno: 0 se OK
!= 0 se houve erro.
Header: #include <stdlib.h>
Descrio: Registra funes para serem executadas aps o trmino normal de
um programa.
274 Programando em C para Linux, Unix e Windows
atof Nvel: 3
Prottipo: double atof(const char *str);
Retorno: Nmero real. Header: #include <stdlib.h>
Descrio: Converte uma string para um nmero do tipo double.
atoi Nvel: 3
Prottipo: int atoi(const char *str);
Retorno: Nmero inteiro. Header: #include <stdlib.h>
Descrio: Converte uma string para um nmero do tipo int.
atol Nvel: 3
Prottipo: long atol(const char *str);
Retorno: Nmero inteiro. Header: #include <stdlib.h>
Descrio: Converte uma string para um nmero do tipo long.
atoll Nvel: 3
Prottipo: long long atoll(const char *nptr);
Retorno: Nmero inteiro. Header: #include <stdlib.h>
Descrio: Converte uma string para um nmero do tipo long long.
basename Nvel: 3
Prottipo: char *basename(char *path);
Retorno: Ponteiro para string Header: #include <libgen.h>
Descrio: Manipulao (parse) de nome de arquivos. Captura o nome do arquivo
a partir do caminho completo.
bind Nvel: 2
Prottipo: int bind(int sockfd, struct sockaddr *my_addr, sock-
len_t addrlen);
Retorno: 0 se OK
-1 se houve erro
Header: #include <sys/types.h>
#include
<sys/socket.h>
Descrio: Associa um nome a um socket.
bsearch Nvel: 3
Prottipo: void *bsearch(const void *key, const void *base,
size_t nmemb, size_t size, int (*compar)(const void
*, const void *));
Retorno: Ponteiro para o item
NULL se no achar
Header: #include <stdlib.h>
Descrio: Busca um item semelhante ao indicado por key num vetor com nmemb
itens iniciado no endereo indicado por base. Os itens tm tamanho
size.
Guia de Referncia das Funes 275
calloc Nvel: 3
Prottipo: void *calloc(size_t nmemb, size_t size);
Retorno: Ponteiro para a memria
ou NULL em caso de erro.
Header: #include <stdlib.h>
Descrio: Alocao dinmica de memria.
cbrt Nvel: 3
Prottipo: double cbrt( double x );
Retorno: Raiz cbica. Header: #include <math.h>
Descrio: Retorna a raiz cbica.
ceil Nvel: 3
Prottipo: double ceil(double num);
Retorno: Menor nmero possvel
maior que num.
Header: #include <math.h>
Descrio: Menor nmero possvel que no seja menor que nmero, por exem-
plo, ceil(1.03) devolver 2.0.
chdir Nvel: 2
Prottipo: int chdir(const char *path);
Retorno: 0 se OK
-1 se houve erro
Header: #include <unistd.h>
Descrio: Mudana do diretrio de trabalho.
chmod Nvel: 2
Prottipo: int chmod(const char *path, mode_t mode);
Retorno: 0 se OK
-1 se houve erro
Header: #include <sys/types.h>
#include <sys/stat.h>
Descrio: Mudana de permisses de um arquivo.
chown Nvel: 2
Prottipo: int chown(const char *path, uid_t owner, gid_t group);
Retorno: 0 se OK
-1 se houve erro
Header: #include <sys/types.h>
#include <unistd.h>
Descrio: Muda o usurio (owner) de um arquivo.
chroot Nvel: 2
Prottipo: int chroot(const char *path);
Retorno: 0 se OK
-1 se houve erro
Header: #include <unistd.h>
Descrio: Altera o diretrio raiz para aquele especificado.
clearerr Nvel: 3
Prottipo: void clearerr(FILE *stream);
Retorno: No tem retorno. Header: #include <stdio.h>
Descrio: Limpa os indicadores de erro de um arquivo.
276 Programando em C para Linux, Unix e Windows
clearenv Nvel: 3
Prottipo: int clearenv(void);
Retorno: 0 se OK
-1 se houve erro.
Header: #include <stdlib.h>
Descrio: Elimina/apaga todas as variveis de ambiente e seu contedo.
clock Nvel: 3
Prottipo: clock_t clock(void);
Retorno: O tempo de CPU usado
no formato clock_t.
Header: #include <time.h>
Descrio: Retorna uma aproximao do tempo de processamento usado pelo
programa. Para obter o nmero de segundos, divida por
CLOCKS_PER_SEC.
close Nvel: 2
Prottipo: int close(int fd);
Retorno: 0 se OK
-1 se houve erro
Header: #include <unistd.h>
Descrio: Fecha o arquivo apontado por fd (aberto por open).
closedir Nvel: 3
Prottipo: int closedir(DIR *dir);
Retorno: 0 se OK
-1 se houve erro
Header: #include <sys/types.h>
#include <dirent.h>
Descrio: Fecha um diretrio (aberto por opendir)
closelog Nvel: 3
Prottipo: void closelog(void);
Retorno: No tem retorno. Header: #include <syslog.h>
Descrio: Fecha o descritor para envio de logs (ver syslog).
connect Nvel: 3
Prottipo: int connect(int sockfd, const struct sockaddr
*serv_addr, socklen_t addrlen);
Retorno: 0 se OK
-1 se houve erro
Header: #include <sys/types.h>
#include
<sys/socket.h>
Descrio: Inicializa uma conexo socket.
copysign Nvel: 3
Prottipo: double copysign(double x, double y);
Retorno: Nmero. Header:
Descrio: Retorna um valor cujo valor absoluto igual a x, mas cujo sinal
igual ao de y.
Guia de Referncia das Funes 277
cos Nvel: 3
Prottipo: double cos(double num);
Retorno: Co-seno. Header: #include <math.h>
Descrio: Devolve o co-seno do nmero. O nmero deve estar em radianos.
creat Nvel: 2
Prottipo: int creat(const char *pathname, mode_t mode);
Retorno: >0 se OK
-1 se houve erro
Header: #include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
Descrio: Cria e abre um arquivo.
crypt Nvel: 3
Prottipo: char *crypt(const char *key, const char *salt);
Retorno: String criptografada. Header: #include <unistd.h>
Descrio: a funo de encriptao de senhas. baseada no algoritmo DES.
ctermid Nvel: 3
Prottipo: char *ctermid(char *s);
Retorno: Ponteiro para o terminal. Header: #include <stdio.h>
Descrio: Obtm o nome do terminal controlador.
ctime Nvel: 3
Prottipo: char *ctime(const time_t *timep);
Retorno: Ponteiro para string con-
tendo a data/hora.
Header: #include <time.h>
Descrio: Retorna uma string com a data/hora.
cuserid Nvel: 3
Prottipo: char *cuserid(char *string);
Retorno: Ponteiro para string. Header: #include <stdio.h>
Descrio: Retorna o nome do usrio do processo.
daemon Nvel: 3
Prottipo: int daemon (int nochdir, int noclose);
Retorno: -1 se houver erro. Header: #include <unistd.h>
Descrio: Desvincula o programa do terminal controlador e o faz executar em
background como um daemon.
difftime Nvel: 3
Prottipo: double difftime(time_t time1, time_t time0);
Retorno: Diferena em segundos. Header: #include <time.h>
Descrio: Retorna o nmero de segundos transcorridos entre time1 e time0.
278 Programando em C para Linux, Unix e Windows
dirname Nvel: 3
Prottipo: char *dirname(char *path);
Retorno: Ponteiro para string. Header: #include <libgen.h>
Descrio: Manipulao (parse) de nomes de arquivos. Retorna o nome do dire-
trio de um nome completo de um arquivo.
div Nvel: 3
Prottipo: div_t div(int numer, int denom);
Retorno: Estrutura div_t com os
valores calculados.
Header: #include <stdlib.h>
Descrio: Calcula o resto e o quociente de uma diviso de inteiros.
dup Nvel: 2
Prottipo: int dup(int oldfd);
Retorno: >0 se OK
-1 se houve erro
Header: #include <unistd.h>
Descrio: Retorna um novo descritor para o arquivo.
dup2 Nvel: 2
Prottipo: int dup2(int oldfd, int newfd);
Retorno: >0 se OK
-1 se houve erro
Header: #include <unistd.h>
Descrio: Retorna um novo descritor (apontado por newfd) para o arquivo.
endgrent Nvel: 3
Prottipo: void endgrent(void);
Retorno: No tem retorno. Header: #include <sys/types.h>
#include <grp.h>
Descrio: Fecha o arquivo /etc/group.
endpwent Nvel: 3
Prottipo: void endpwent(void);
Retorno: No tem retorno. Header: #include <sys/types.h>
#include <pwd.h>
Descrio: Fecha o arquivo /etc/passwd.
execl Nvel: 3
Prottipo: int execl(const char *path, const char *arg, ...);
Retorno: Se retornar, um int espe-
cificando o erro.
Header: #include <unistd.h>
Descrio: Substitui o processo atual por um novo processo a ser carregado
(passado como parmetro).
Guia de Referncia das Funes 279
execle Nvel: 3
Prottipo: int execle(const char *path, const char *arg ,
..., char * const envp[]);
Retorno: Se retornar, um int espe-
cificando o erro.
Header: #include <unistd.h>
Descrio: Substitui o processo atual por um novo processo a ser carregado
(passado como parmetro).
execlp Nvel: 3
Prottipo: int execlp(const char *file, const char *arg, ...);
Retorno: Se retornar, um int espe-
cificando o erro.
Header: #include <unistd.h>
Descrio: Substitui o processo atual por um novo processo a ser carregado
(passado como parmetro).
execv Nvel: 3
Prottipo: int execv(const char *path, char *const argv[]);
Retorno: Se retornar, um int espe-
cificando o erro.
Header: #include <unistd.h>
Descrio: Substitui o processo atual por um novo processo a ser carregado
(passado como parmetro).
execve Nvel: 2
Prottipo: int execve(const char *filename, char *const
argv [], char *const envp[]);
Retorno: Se retornar, um int espe-
cificando o erro.
Header: #include <unistd.h>
Descrio: Substitui o processo atual por um novo processo a ser carregado
(passado como parmetro).
execvp Nvel: 3
Prottipo: int execvp(const char *file, char *const argv[]);
Retorno: Se retornar, um int espe-
cificando o erro.
Header: #include <unistd.h>
Descrio: Substitui o processo atual por um novo processo a ser carregado
(passado como parmetro).
exit Nvel: 3
Prottipo: void exit(int status);
Retorno: No tem retorno. Header: #include <stdlib.h>
Descrio: Termina o programa. Arquivos abertos sero fechados, buffers des-
carregados e funes cadastradas atravs da funo atexit sero
executadas. Somente aps todos esses passos o controle passa para
o kernel do sistema operacional.
280 Programando em C para Linux, Unix e Windows
exp Nvel: 3
Prottipo: double exp(double num);
Retorno: Logaritmo natural Header: #include <math.h>
Descrio: Devolve logaritmo natural e elevado potncia de nmero.
fabs Nvel: 3
Prottipo: double fabs(double num);
Retorno: Valor absoluto. Header: #include <math.h>
Descrio: Devolve o valor absoluto de nmero.
fchdir Nvel: 2
Prottipo: int fchdir(int fd);
Retorno: 0 se OK
-1 se houve erro
Header: #include <unistd.h>
Descrio: Mudana de diretrio, idntica funo chdir, somente utilizado
um identificador de arquivo para o diretrio.
fchmod Nvel: 2
Prottipo: int fchmod(int fildes, mode_t mode);
Retorno: 0 se OK
-1 se houve erro.
Header: #include <sys/types.h>
#include <sys/stat.h>
Descrio: Mudana de permisses de um arquivo, idntica funo chmod, so-
mente utilizado um identificador de arquivo.
fchown Nvel: 2
Prottipo: int fchown(int fd, uid_t owner, gid_t group);
Retorno: 0 se OK
-1 se houve erro.
Header: #include <sys/types.h>
#include <unistd.h>
Descrio: Mudana de usurio/grupo de um arquivo, idntica funo chown,
somente utilizado um identificador de arquivo.
fclose Nvel: 3
Prottipo: int fclose(FILE *stream);
Retorno: 0 se OK
EOF se houve erro.
Header: #include <stdio.h>
Descrio: Fecha um arquivo.
fcntl Nvel: 2
Prottipo: int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd, struct flock *lock);
Retorno: -1 se ouve erro
Depende de cmd se OK
Header: #include <unistd.h>
#include <fcntl.h>
Descrio: Realiza vrias permisses em um arquivo (indicado pelo descritor do
arquivo). As operaes sero determinadas por cmd.
Guia de Referncia das Funes 281
fdopen Nvel: 3
Prottipo: FILE * fdopen (int FileDescriptor, const char *type)
Retorno: Ponteiro para FILE (OK)
NULL (Erro)
Header: #include <stdio.h>
Descrio: Transforma um descritor de arquivo (aberto com as funes de nvel
2, como open, por exemplo) em um ponteiro para FILE.
feof Nvel: 3
Prottipo: int feof(FILE *stream);
Retorno: !=0 se o final do arquivo foi
alcanado
0 se no
Header: #include <stdio.h>
Descrio: Verifica se o final do arquivo foi alcanado.
ferror Nvel: 3
Prottipo: int ferror(FILE *stream);
Retorno: !=0 se existe erro
0 se no
Header: #include <stdio.h>
Descrio: Verifica se existe algum erro no arquivo.
fflush Nvel: 3
Prottipo: int fflush(FILE *stream);
Retorno: 0 se OK
EOF se houve erro.
Header: #include <stdio.h>
Descrio: Fora o descarregamento do buffer de gravao de um arquivo.
fgetc Nvel: 3
Prottipo: int fgetc(FILE *stream);
Retorno: Caractere se OK
EOF se houve erro ou o fi-
nal do arquivo foi alcana-
do.
Header: #include <stdio.h>
Descrio: L um caractere do arquivo.
fgetgrent Nvel: 3
Prottipo: struct group *fgetgrent(FILE *stream);
Retorno: Ponteiro para estrutura
NULL se no existem mais
grupos ou se ocorreu um
erro.
Header: #include <stdio.h>
#include <sys/types.h>
#include <grp.h>
Descrio: Ponteiro para a estrutura de grupo (/etc/group).
282 Programando em C para Linux, Unix e Windows
fgetpwen Nvel: 3
Prottipo: struct passwd *fgetpwent(FILE *stream);
Retorno: Ponteiro para estrutura
NULL se no existe mais
usurio ou se ocorreu um
erro.
Header: #include <stdio.h>
#include <sys/types.h>
#include <pwd.h>
Descrio: Ponteiro para a estrutura de usurios/senhas (/etc/passwd).
fgetpos Nvel: 3
Prottipo: int fgetpos(FILE *stream, fpos_t *pos);
Retorno: 0 se OK
!= 0 seno
Header: #include <stdio.h>
Descrio: Retorna a posio atual do arquivo. Equivalente funo ftell.
fgets Nvel: 3
Prottipo: char *fgets(char *s, int size, FILE *stream);
Retorno: NULL em caso de erro
Ponteiro para os dados lidos.
Header: #include <stdio.h>
Descrio: Leitura de dados do arquivo.
fileno Nvel: 3
Prottipo: int fileno(FILE *stream);
Retorno: Descritor do arquivo (int)
associado ao stream.
Header: #include <stdio.h>
Descrio: Retorna o descritor do arquivo (em formato de um inteiro e como uti-
lizado nas funes de nvel 2) associado ao stream indicado.
flock Nvel: 2
Prottipo: int flock(int fd, int operation);
Retorno: 0 se OK
-1 se houve erro.
Header: #include <sys/file.h>
Descrio: Aplica ou remove uma trava no arquivo.
floor Nvel: 3
Prottipo: Double floor(double num);
Retorno: Maior nmero possvel me-
nor que num.
Header: #include <math.h>
Descrio: Devolve o maior nmero possvel que no seja maior que nmero, por
exemplo, floor(1.4) retornar 1.0.
fopen Nvel: 3
Prottipo: FILE * fopen(const char *path, const char *type)
Retorno: Ponteiro para FILE (OK)
NULL (Erro)
Header: #include <stdio.h>
Descrio: Abre um arquivo e retorna uma stream do tipo FILE para o arquivo
aberto.
Guia de Referncia das Funes 283
fopen64 Nvel: 3
Prottipo: FILE * fopen64(const char *path, const char *type)
Retorno: Ponteiro para FILE (OK)
NULL (Erro)
Header: #include <stdio.h>
Descrio: Abre um arquivo e retorna uma stream do tipo FILE para o arquivo
aberto.
fork Nvel: 2
Prottipo: pid_t fork(void);
Retorno: PID se OK
-1 se houve erro
Header: #include <sys/types.h>
#include <unistd.h>
Descrio: Cria um processo filho idntico ao pai.
fpathconf Nvel: 3
Prottipo: long fpathconf(int filedes, int name);
Retorno: -1 se houve erro
!=0 se OK (depende de
name)
Header: #include <unistd.h>
Descrio: Retorna informaes referentes configurao do arquivo.
fprintf Nvel: 3
Prottipo: int fprintf (FILE *stream, const char *format,
[value, . . .])
Retorno: >0 se OK
<0 em caso de erro
Header: #include <stdio.h>
Descrio: Formata uma sada e grava em arquivo apontado por stream.
fputc Nvel: 3
Prottipo: int fputc(int c, FILE *stream);
Retorno: Prprio caractere se OK
EOF se houve erro
Header: #include <stdio.h>
Descrio: Grava um caractere no arquivo.
fputs Nvel: 3
Prottipo: int fputs(const char *s, FILE *stream);
Retorno: >0 se OK
EOF se houve erro.
Header: #include <stdio.h>
Descrio: Grava uma string no arquivo.
fread Nvel: 3
Prottipo: size_t fread ( (const void *) pointer, size_t size,
size_t NumberOfItems, FILE * stream)
Retorno: Nmero de bytes lidos. Header: #include <stdio.h>
Descrio: Realiza a leitura de bytes (size * NumberOfItems) de um arquivo.
284 Programando em C para Linux, Unix e Windows
free Nvel: 3
Prottipo: void free(void *ptr)
Retorno: No tem retorno. Header: #include <stdlib.h>
Descrio: Libera espao previamente alocado com malloc, realloc ou cal-
loc.
freopen Nvel: 3
Prottipo: FILE * freopen ( const char *path, const char *type,
FILE * stream)
Retorno: Ponteiro para FILE (OK)
NULL (Erro)
Header: #include <stdio.h>
Descrio: Abre outro arquivo e associa a uma stream do tipo FILE de um ar-
quivo j aberto.
freopen64 Nvel: 3
Prottipo: FILE * freopen64 ( const char *path, const char
*type, FILE * stream)
Retorno: Ponteiro para FILE (OK)
NULL (Erro)
Header: #include <stdio.h>
Descrio: Abre outro arquivo e associa a uma stream do tipo FILE de um ar-
quivo j aberto.
fscanf Nvel: 3
Prottipo: int fscanf(FILE *stream, const char *format, ...);
Retorno: Quantidade de dados lidos.
EOF se erro
Header: #include <stdio.h>
Descrio: L as informaes de um arquivo de acordo com os parmetros pas-
sados (como na funo scanf).
fseek Nvel: 3
Prottipo: int fseek(FILE *stream, long offset, int whence);
Retorno: 0 se OK
!=0 se houve erro.
Header: #include <stdio.h>
Descrio: Posiciona o ponteiro do arquivo dentro do arquivo especificado.
fsetpos Nvel: 3
Prottipo: int fsetpos(FILE *stream, fpos_t *pos);
Retorno: 0 se OK
!=0 se houve erro.
Header: #include <stdio.h>
Descrio: Posiciona o ponteiro do arquivo. Equivalente funo fseek passan-
do o parmetro SEEK_SET.
Guia de Referncia das Funes 285
fstat Nvel: 2
Prottipo: int fstat(int filedes, struct stat *buf);
Retorno: 0 se OK
-1 se houve erro.
Header: #include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
Descrio: Retorna informaes (atributos) a respeito do arquivo.
fsync Nvel: 2
Prottipo: int fsync(int fd);
Retorno: 0 se OK
-1 se houve erro
Header: #include <unistd.h>
Descrio: Sincroniza um arquivo (totalmente) em disco.
ftell Nvel: 3
Prottipo: long ftell(FILE *stream);
Retorno: Posio atual do arquivo.
-1L se houve erro
Header: #include <stdio.h>
Descrio: Retorna a posio atual do ponteiro dentro do arquivo em bytes (em
forma de um long) .
ftime Nvel: 3
Prottipo: int ftime(struct timeb *tp);
Retorno: Sempre 0. Header: #include <sys/timeb.h>
Descrio: Retorna a data e hora corrente no ponteiro passado.
ftruncate Nvel: 2
Prottipo: int ftruncate(int fd, off_t length);
Retorno: 0 se OK
-1 se houve erro.
Header: #include <unistd.h>
#include <sys/types.h>
Descrio: Trunca o arquivo para o tamanho especificado.
fwrite Nvel: 3
Prottipo: size_t fwrite(const void pointer, size_t size,
size_t NumberOfItems, FILE * stream)
Retorno: Nmero de bytes gravados. Header: #include <stdio.h>
Descrio: Realiza a gravao de bytes em um arquivo.
getc Nvel: 3
Prottipo: int getc(FILE *stream);
Retorno: Caractere se OK
EOF se houve erro ou o fi-
nal do arquivo foi alcana-
do.
Header: #include <stdio.h>
Descrio: L um caractere do arquivo (equivalente funo fgetc).
286 Programando em C para Linux, Unix e Windows
getchar Nvel: 3
Prottipo: int getchar(void);
Retorno: Caractere se OK
EOF se houve erro ou o final
do arquivo foi alcanado.
Header: #include <stdio.h>
Descrio: L um caractere da entrada padro.
getcwd Nvel: 3
Prottipo: char *getcwd(char *buf, size_t size);
Retorno: Ponteiro para dados lidos
NULL em caso de erro
Header: #include <unistd.h>
Descrio: Recupera o nome do completo para o diretrio de trabalho atual.
getdate Nvel: 3
Prottipo: struct tm *getdate (const char *string);
Retorno: Estrutura para data
NULL se houve erro
Header: #include <time.h>
Descrio: Retorna uma estrutura tm para string de data passada.
getegid Nvel: 2
Prottipo: gid_t getegid (void);
Retorno: Nmero do GID Header: #include <unistd.h>
#include <sys/types.h>
Descrio: Retorna o nmero do GID do grupo efetivo que est executando o
processo.
getenv Nvel: 3
Prottipo: char *getenv(const char *name;)
Retorno: Ponteiro para o contedo
da varivel NULL se a vari-
vel no existir
Header: #include <stdlib.h>
Descrio: Retorna o contedo de um varivel de ambiente.
geteuid Nvel: 2
Prottipo: uid_t geteuid(void);
Retorno: Nmero do UID Header: #include <sys/types.h>
#include <unistd.h>
Descrio: Retorna o nmero do UID do usurio efetivo que est executando o
processo.
getgid Nvel: 2
Prottipo: gid_t getgid (void);
Retorno: Nmero do GID Header: #include <unistd.h>
#include <sys/types.h>
Descrio: Retorna o nmero do GID do grupo real que est executando o pro-
cesso.
Guia de Referncia das Funes 287
getgrent Nvel: 3
Prottipo: struct group *getgrent(void);
Retorno: Estrutura de grupos Header: #include <sys/types.h>
#include <grp.h>
Descrio: Retorna as informaes do arquivo /etc/group em uma estrutura
(na forma de um ponteiro).
getgrgid Nvel: 3
Prottipo: struct group *getgrgid(gid_t GID)
Retorno: Ponteiro para estrutura
NULL se o grupo no exis-
tir ou no estiver dispon-
vel
Header: #include <sys/types.h>
#include <grp.h>
Descrio: Retorna as informaes de um grupo especfico a partir do nmero do
GID. As informaes so retiradas do arquivo /etc/group.
getgrnam Nvel: 3
Prottipo: struct group *getgrnam(const char * name)
Retorno: Ponteiro para estrutura
NULL se o grupo no exis-
tir ou no estiver dispon-
vel
Header: #include <sys/types.h>
#include <grp.h>
Descrio: Retorna as informaes de um grupo especfico a partir do seu nome.
As informaes so retiradas do arquivo /etc/group.
getgroups Nvel: 2
Prottipo: int getgroups(int ngroups, gid_t GIDSet)
Retorno: # de grupos
-1 se erro
Header: #include <sys/types.h>
#include <unistd.h>
Descrio: Retorna os GIDs (em GIDSet) dos grupos suplementares de um pro-
cesso.
gethostid Nvel: 2
Prottipo: long gethostid(void);
Retorno: Indentificador do host Header: #include <unistd.h>
Descrio: Retorna o identificador nico do host.
gethostname Nvel: 2
Prottipo: int gethostname(char * name, int length)
Retorno: 0 se OK
-1 se erro
Header: #include <unistd.h>
Descrio: Retorna o nome do host da mquina. O tamanho do nome limitado
por length.
288 Programando em C para Linux, Unix e Windows
getlogin Nvel: 3
Prottipo: char *getlogin (void)
Retorno: Ponteiro para o login
NULL se houve erro.
Header: #include <sys/types.h>
#include <unistd.h>
#include <limits.h>
Descrio: Retorna o login name do usurio que est executando o processo.
getlogin_r Nvel: 3
Prottipo: int getlogin_r(char * name, size_t length);
Retorno: 0 se OK
-1 se houve erro.
Header: #include <sys/types.h>
#include <unistd.h>
#include <limits.h>
Descrio: Retorna o login name do usurio a partir do arquivo /etc/utmp. Indica-
do para processos multi-thread.
getmsg Nvel: 2
Prottipo: int getmsg (int fd, struct strbuf *ctlptr, struct
strbuf *dataptr, int *flags);
Retorno: >1 se OK
-1 se houve erro
Header: #include <stropts.h>
Descrio: L as mensagens da fila de um arquivo.
getopt Nvel: 3
Prottipo: int getopt(int argc, char * const argv[], const char
*optstring);
Retorno: Opo pesquisada
: se uma opo foi achada
mas exige parmetro
? se a opo for desconhe-
cida
-1 se o final da lista foi al-
canado
Header: #include <unistd.h>
Descrio: Pega os parmetros (passados como opes) na linha de comando.
getpeername Nvel: 2
Prottipo: int getpeername(int s, struct sockaddr *name, sock-
len_t *namelen);
Retorno: 0 se OK
-1 se houve erro
Header: #include
<sys/socket.h>
Descrio: Captura o nome do ponto conectado ao socket.
getpgid Nvel: 2
Prottipo: pid_t getpgid(pid_t pid);
Retorno: Process Group ID Header: #include <unistd.h>
Descrio: Retorna o nmero de identificao do grupo para o processo especifi-
cado.
Guia de Referncia das Funes 289
getpgrp Nvel: 2
Prottipo: pid_t getpgrp (void);
Retorno: Nmero GID. Header: #include <unistd.h>
Descrio: Retorna o nmero do GID de grupo do processo.
getpid Nvel: 2
Prottipo: pid_t getpid(void);
Retorno: Nmero do PID. Header: #include <sys/types.h>
#include <unistd.h>
Descrio: Retorna o nmero do processo.
getpmsg Nvel: 3
Prottipo: int getpmsg (int fd, struct strbuf *ctlptr, struct
strbuf *dataptr, int *bandp, int *flags);
Retorno: >1 se OK
-1 se houve erro.
Header: #include <stropts.h>
Descrio: L as mensagens da fila de um arquivo. Idntico a getmsg, exceto
que especificada a prioridade da mensagem que ser quer ler.
getppid Nvel: 2
Prottipo: pid_t getppid (void);
Retorno: Nmero PID. Header: #include <sys/types.h>
#include <unistd.h>
Descrio: Retorna o PPID (PID do processo pai) do processo corrente.
getpwent Nvel: 3
Prottipo: struct passwd *getpwent (void);
Retorno: Ponteiro para estrutura
NULL se houve erro ou o
final do arquivo foi alcan-
ado.
Header: #include <sys/types.h>
#include <pwd.h>
Descrio: Retorna as informaes do prximo usurio (informaes so retiradas
de /etc/passwd)
getpwnam Nvel: 3
Prottipo: struct passwd *getpwnam(char *name)
Retorno: Ponteiro se OK
NULL se houve erro
Header: #include <sys/types.h>
#include <pwd.h>
Descrio: Retorna as informaes do usurio especificado em name (informa-
es so retiradas de /etc/passwd).
290 Programando em C para Linux, Unix e Windows
getpwuid Nvel: 3
Prottipo: struct passwd *getpwuid(uid_t uid);
Retorno: Ponteiro se OK
NULL se houve erro
Header: #include <sys/types.h>
#include <pwd.h>
Descrio: Retorna as informaes do usurio especificado em uid (informaes
so retiradas de /etc/passwd).
gets Nvel: 3
Prottipo: char *gets(char * string)
Retorno: String se OK
NULL se houve erro ou se
o final do arquivo foi
alcanado.
Header: #include <stdio.h>
Descrio: L os dados da entrada padro (stdin) e guarda na string.
getsid Nvel: 2
Prottipo: pid_t getsid(pid_t pid);
Retorno: ID se OK
-1 se houve erro.
Header: #include <unistd.h>
Descrio: Retorna o ID de seo do processo.
getsockname Nvel: 2
Prottipo: int getsockname(int s, struct sockaddr * name,
socklen_t * namelen);
Retorno: 0 se OK
-1 se houve erro
Header: #include
<sys/socket.h>
Descrio: Retorna o nome de um socket.
gmtime Nvel: 3
Prottipo: struct tm *gmtime(time_t *time)
Retorno: Ponteiro para a estrutura. Header: #include <time.h>
Descrio: Retorna uma estrutura com as informaes referentes a data/hora a
partir da hora informada (hora informada em formato long)
gettimeofday Nvel: 2
Prottipo: int gettimeofday(struct timeval *tv, struct time-
zone *tz);
Retorno: 0 se OK
-1 se houve.
Header: #include <sys/time.h>
Descrio: Retorna hora do sistema.
getuid Nvel: 2
Prottipo: uid_t getuid(void);
Retorno: Nmero do UID Header: #include <sys/types.h>
#include <unistd.h>
Descrio: Retorna o UID do usurio que est executando o processo.
Guia de Referncia das Funes 291
getumask Nvel: 3
Prottipo: mode_t getumask(void);
Retorno: Mscara padro. Header: #include <sys/types.h>
#include <sys/stat.h>
Descrio: Retorna a mscara padro para criao de arquivos.
initgroups Nvel: 3
Prottipo: int initgroups(char *user, int GID)
Retorno: 0 se OK
-1 se houve erro.
Header: #include <unistd.h>
#include <sys/types.h>
Descrio: A partir das informaes passadas, seta as informaes de grupo do
processo que est sendo executado. Interfere no funcionamento das
famlias de funes getgrent e getpwent.
isalnum Nvel: 3
Prottipo: int isalnum(int ch);
Retorno: !=0 se ch for letra
!=0 se ch for dgito
0 se ch no for alfanumri-
co
Header: #include <ctype.h>
Descrio: Verifica se um caractere alfanumrico ou no.
isalpha Nvel: 3
Prottipo: int isalpha(int ch);
Retorno: !=0 se for uma letra
0 se no for uma letra
Header: #include <ctype.h>
Descrio: Verifica se um caractere uma letra. Na lngua portuguesa de Aa at
Zz.
iscntrl Nvel: 3
Prottipo: int iscntrl(int ch)
Retorno: !=0 se for um caractere de
controle
0 se no for um caractere
de controle
Header: #include <ctype.h>
Descrio: Verifica se um caractere um caractere de controle entre 0 e 0x1F ou
0x7F (DEL).
isdigit Nvel: 3
Prottipo: int isdigit(int ch);
Retorno: !=0 se for dgito
0 se no for dgito
Header: #include <ctype.h>
Descrio: Verifica se um caractere dgito (entre 0 e 9).
292 Programando em C para Linux, Unix e Windows
isgraph Nvel: 3
Prottipo: int isgraph(int ch);
Retorno: !=0 se pode ser impresso
0 se no pode ser impresso
Header: #include <ctype.h>
Descrio: Verifica se um caractere pode ser impresso (depende do sistema ope-
racional). Exclui o espao.
islower Nvel: 3
Prottipo: int islower
Retorno: !=0 se minscula
0 se no
Header: #include <ctype.h>
Descrio: Verifica se um caractere (letra) minscula ou no.
isprint Nvel: 3
Prottipo: int isprint(int ch);
Retorno: !=0 se pode ser impresso
0 se no pode ser impresso
Header: #include <ctype.h>
Descrio: Verifica se um caractere pode ser impresso (depende do sistema ope-
racional). Inclui o espao.
ispunct Nvel: 3
Prottipo: int ispunct(int ch);
Retorno: !=0 se for pontuao
0 se no.
Header: #include <ctype.h>
Descrio: Verifica se um caractere um caractere de pontuao.
isspace Nvel: 3
Prottipo: int isspace(int ch);
Retorno: !=0 se for um espao
0 se no
Header: #include <ctype.h>
Descrio: Verifica se o caractere espao, tabulao, caractere de nova linha
ou retorno de carro.
isupper Nvel: 3
Prottipo: int isupper(int ch);
Retorno: !=0 se maiscula
0 se no
Header: #include <ctype.h>
Descrio: Verifica se um caractere (letra) maiscula.
isxdigit Nvel: 3
Prottipo: int isxdigit(int ch);
Retorno: !=0 se for digtio
0 se no for
Header: #include <ctype.h>
Descrio: Verifica se o caractere um digto hexadecimal (0 at 9 e A at F).
Guia de Referncia das Funes 293
kill Nvel: 2
Prottipo: int kill(int process, int signal);
Retorno: 0 se OK
-1 se houve erro.
Header: #include <sys/types.h>
#include <signal.h>
Descrio: Envia um sinal para o processo.
killpg Nvel: 2
Prottipo: int killpg(int pgrp, int sig);
Retorno: 0 se OK
-1 se houve erro.
Header: #include <signal.h>
Descrio: Envia um sinal para um grupo de processos. Deve especificar o grupo
de processo em pgrp.
labs Nvel: 3
Prottipo: long labs(long num);
Retorno: Nmero absoluto. Header: #include <stdlib.h>
Descrio: Devolve o nmero absoluto de um nmero.
llabs Nvel: 3
Prottipo: long long int llabs(long long int j);
Retorno: Nmero absoluto. Header: #include <stdlib.h>
Descrio: Devolve o nmero absoluto de um nmero.
lchown Nvel: 2
Prottipo: int lchown (const char *path, uid_t owner, gid_t
group);
Retorno: 0 se OK
-1 se houve erro
Header: #include <unistd.h>
Descrio: Muda usurio/grupo de um link simblico (mesmo que chown).
link Nvel: 2
Prottipo: int link(const char *path1, const char *path2);
Retorno: 0 se OK
-1 se houve erro
Header: #include <unistd.h>
Descrio: Cria um hard link para o arquivo.
listen Nvel: 2
Prottipo: int listen(int s, int backlog);
Retorno: 0 se OK
-1 se houve erro
Header: #include
<sys/socket.h>
Descrio: Habilita conexes para um socket.
294 Programando em C para Linux, Unix e Windows
localtime Nvel: 3
Prottipo: Struct tm *localtime(const time_t * time);
Retorno: Ponteiro para estrutura. Header: #include <time.h>
Descrio: Retorna uma estrutura com as informaes referentes a data/hora a
partir da hora informada (hora informada em formato long)
log Nvel: 3
Prottipo: Double log(double num);
Retorno: Logaritmo natural. Header: #include <math.h>
Descrio: Devolve o logaritmo natural do nmero. O nmero no pode ser nega-
tivo.
log10 Nvel: 3
Prottipo: Double log10(double num);
Retorno: Logaritmo base de num. Header: #include <math.h>
Descrio: Retorna o logartmo de base 10 do nmero. O nmero no pode ser
negativo.
login Nvel: 3
Prottipo: void login(const struct utmp *ut);
Retorno: No tem retorno. Header: #include <utmp.h>
Descrio: Informa que um usurio se conectou (grava informaes em
/var/run/utmp e /var/log/wtmp).
logout Nvel: 3
Prottipo: int logout(const char *ut_line);
Retorno: 1 se OK
0 se houve erro
Header: #include <utmp.h>
Descrio: Informa que um usurio se desconectou (grava informaes em
/var/run/utmp e /var/log/wtmp).
lseek Nvel: 2
Prottipo: off_t lseek (int fd, off_t offset, int whence)
Retorno: Nova posio do arquivo
-1 se houve erro
Header: #include <sys/types.h>
#include <unistd.h>
Descrio: Posiciona o ponteiro de leitura/gravao dentro do arquivo (equivalen-
te a fseek).
lseek64 Nvel: 2
Prottipo: off64_t lseek64 (int fd, off64_t offset, int whence)
Retorno: Nova posio do arquivo
-1 se houve erro
Header: #include <sys/types.h>
#include <unistd.h>
Descrio: Posiciona o ponteiro de leitura/gravao dentro do arquivo (equivalen-
te a fseek).
Guia de Referncia das Funes 295
lstat Nvel: 2
Prottipo: int lstat(const char *path, Buffer)
Retorno: 0 se OK
-1 se houve erro
Header: #include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
Descrio: Obtm informaes (atributos, hora de criao etc.) de um link simb-
lico.
malloc Nvel: 3
Prottipo: void *malloc(size_t size);
Retorno: Ponteiro para a memria
ou NULL em caso de erro.
Header: #include <stdlib.h>
Descrio: Alocao dinmica de memria.
memchr Nvel: 3
Prottipo: void *memchr(const void *s, int c, size_t n);
Retorno: Ponteiro para o byte en-
contrado
NULL se no foi encontra-
do.
Header: #include <string.h>
Descrio: Procura um caractere nos primeiros n bytes da string.
memcmp Nvel: 3
Prottipo: int memcmp(const void *s1, const void *s2, size_t n);
Retorno: 0 se as strings so iguais
<0 se s1 < s2
>0 se s1 > s2
Header: #include <string.h>
Descrio: Compara n bytes entre duas strings.
memcpy Nvel: 3
Prottipo: void *memcpy(void *dest, const void *src, size_t n);
Retorno: Ponteiro para dest Header: #include <string.h>
Descrio: Copia n bytes da origem para o destino.
memmove Nvel: 3
Prottipo: void *memmove(void *dest, const void *src, size_t n);
Retorno: Ponteiro para dest Header: #include <string.h>
Descrio: Copia n bytes da origem para o destino.
memset Nvel: 3
Prottipo: void *memset(void *s, int c, size_t n);
Retorno: Ponteiro para s Header: #include <string.h>
Descrio: Preenche o ponteiro passado (nos n primeiros bytes) com o caractere
informado.
296 Programando em C para Linux, Unix e Windows
mkdtemp Nvel: 3
Prottipo: char *mkdtemp(char *template);
Retorno: Ponteiro para string
NULL se houve erro.
Header: #include <stdlib.h>
Descrio: Cria um diretrio temporrio nico no sistema de arquivos.
mkdir Nvel: 2
Prottipo: int mkdir(const char *path, mode_t mode)
Retorno: 0 se OK
-1 se houve erro
Header: #include <sys/stat.h>
#include <sys/types.h>
Descrio: Cria um diretrio no sistema de arquivos.
mkfifo Nvel: 3
Prottipo: int mkfifo (const char *path, mode_t mode)
Retorno: 0 se OK
-1 se houve erro
Header: #include <sys/types.h>
#include <sys/stat.h>
Descrio: Cria um FIFO (first-in-first-out) no sistema de arquivos.
mknod Nvel: 2
Prottipo: int mknod(const char *pathname, mode_t mode, dev_t
dev);
Retorno: 0 se OK
-1 se houve erro
Header: #include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
Descrio: Cria um arquivo especial (device, pipe etc.) no sistema de arquivos.
mkstemp Nvel: 3
Prottipo: int mkstemp(char *template);
Retorno: Descritor do arquivo
-1 se houve erro.
Header: #include <stdlib.h>
Descrio: Cria um arquivo temporrio nico.
mktemp Nvel: 3
Prottipo: char *mktemp(char *template);
Retorno: Ponteiro para arquivo
NULL se houve erro.
Header: #include <stdlib.h>
Descrio: Cria um arquivo temporrio nico.
mktime Nvel: 3
Prottipo: time_t mktime(struct tm *timeptr)
Retorno: long para tempo
-1 se houve erro
Header: #include <time.h>
Descrio: A partir da estrutura de data/hora, retorna um novo valor para hora
(segundos decorridos desde 01/01/1970).
Guia de Referncia das Funes 297
mmap Nvel: 2
Prottipo: caddr_t *mmap(void *addr, size_t len, int prot, int
flags, int fildes, off_t off);
void *mmap(void *addr, size_t len, int prot, int
flags, int fildes, off_t off);
Retorno: Ponteiro para incio do
endereo
-1 se houve erro.
Header: #include <sys/types.h>
#include <sys/mman.h>
Descrio: Cria um novo mapeamento de memria em disco.
mount Nvel: 2
Prottipo: int mount(const char *source, const char *target,
const char *filesystemtype, unsigned long mount-
flags, const void *data);
Retorno: 0 se OK
-1 se houve erro.
Header: #include <sys/mount.h>
Descrio: Monta um sistema de arquivos.
mremap Nvel: 2
Prottipo: void * mremap(void *old_address, size_t old_size ,
size_t new_size, unsigned long flags);
Retorno: Ponteiro para o novo en-
dereo
-1 se houve erro.
Header: #include <unistd.h>
#include <sys/mman.h>
Descrio: Remapeia a memria mapeada anteriormente.
msync Nvel: 2
Prottipo: int msync(const void *start, size_t length, int
flags);
Retorno: 0 se OK
-1 se houve erro.
Header:
Descrio: Envia as alteraes feitas em um arquivo mapeado em memria u-
sando mmap de volta para o disco.
munmap Nvel: 2
Prottipo: int munmap(void *start, size_t length);
Retorno: 0 se OK
-1 se houve erro
Header: #include <sys/mman.h>
Descrio: Desmapeia um mapeamento de memria em disco.
nice Nvel: 2
Prottipo: int nice(int inc);
Retorno: 0 se OK
-1 se houve erro
Header: #include <unistd.h>
Descrio: Altera a prioridade do processo.
298 Programando em C para Linux, Unix e Windows
open Nvel: 2
Prottipo: int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
Retorno: Descritor para arquivo.
-1 se houve erro.
Header: #include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
Descrio: Cria/abre um arquivo no sistema de arquivos.
opendir Nvel: 3
Prottipo: DIR *opendir(const char *name);
Retorno: Ponteiro para diretrio
NULL se houve erro
Header: #include <sys/types.h>
#include <dirent.h>
Descrio: Abre um diretrio especfico.
openlog Nvel: 3
Prottipo: void openlog( char *ident, int option, int facility);
Retorno: No tem retorno. Header: #include <syslog.h>
Descrio: Abre um arquivo (conexo) para o sistema de logs do sistema opera-
cional. Utilize sempre syslog.
pause Nvel: 2
Prottipo: int pause(void);
Retorno: -1 sempre Header: #include <unistd.h>
Descrio: Faz com o que processo que a chama aguarde at que um sinal seja
recebido.
pathconf Nvel: 3
Prottipo: long pathconf(char *path, int name);
Retorno: Limite se existir
-1 se houve erro.
Header: #include <unistd.h>
Descrio: Obtm um valor para a opo de configurao name para o nome de
arquivo.
pclose Nvel: 3
Prottipo: int pclose(FILE *stream);
Retorno: Cdigo de retorno do pro-
cesso.
-1 se houve erro.
Header: #include <stdio.h>
Descrio: Fecha um canal de comunicao pipeline.
perror Nvel: 3
Prottipo: void perror(const char *s);
Retorno: No tem retorno. Header: #include <stdio.h>
Descrio: Mostra a mensagem do erro em funo da varivel errno.
Guia de Referncia das Funes 299
pipe Nvel: 2
Prottipo: int pipe(int filedes[2]);
Retorno: 0 se OK
-1 se houve erro
Header: #include <unistd.h>
Descrio: Cria um par de descritores de arquivo, apontando para um inode
pipe, e o coloca no vetor apontado por filedes. filedes[0]
para leitura, filedes[1] para escrita.
popen Nvel: 3
Prottipo: FILE *popen(const char *command, const char *type);
Retorno: Ponteiro para arquivo
NULL se houve erro
Header: #include <stdio.h>
Descrio: Abre um processo atravs de um pipe.
pow Nvel: 3
Prottipo: double pow(double base, double exp);
Retorno: base
exp
Header: #include <math.h>
Descrio: Devolve o nmero base elevada ao nmero exponencial.
printf Nvel: 3
Prottipo: int printf(const char *format, [Value, ...]);
Retorno: >0 se ok
<0 em caso de erro
Header: #include <stdio.h>
Descrio: Imprime uma mensagem formatada
psignal Nvel: 3
Prottipo: void psignal(int sig, const char *s);
Retorno: No tem retorno. Header: #include <signal.h>
Descrio: Mostra uma mensagem na sada de erro padro contendo o sinal re-
cebido.
ptrace Nvel: 2
Prottipo: long ptrace(enum __ptrace_request request, pid_t
pid, void *addr);
Retorno: Dados requisitados ou 0 se
OK
-1 se houve erro
Header: #include
<sys/ptrace.h>
Descrio: Habilita o acompanhamento das chamadas de sistemas (veja co-
mando strace).
putc Nvel: 3
Prottipo: int putc(int c, FILE *stream);
Retorno: Caractere gravado. Header: #include <stdio.h>
Descrio: Grava um caractere no arquivo.
300 Programando em C para Linux, Unix e Windows
putchar Nvel: 3
Prottipo: int putchar(int c);
Retorno: Caractere gravado. Header: #include <stdio.h>
Descrio: Grava um caractere na sada padro.
putenv Nvel: 3
Prottipo: int putenv(const char *string);
Retorno: 0 se OK
-1 se houve erro
Header: #include <stdlib.h>
Descrio: Cria/modifica uma varivel de ambiente.
putgrent Nvel: 3
Prottipo: int putgrent(const struct group *grp, FILE *fp);
Retorno: 0 se OK
-1 se houve erro
Header: #include <grp.h>
Descrio: Grava as informaes de grupos no arquivo especificado (no formato
de /etc/group).
putpwent Nvel: 3
Prottipo: int putpwent(const struct passwd *p, FILE *stream);
Retorno: 0 se OK
-1 se houve erro
Header: #include <pwd.h>
#include <stdio.h>
#include <sys/types.h>
Descrio: Grava as informaes de usurio no arquivo especificado (no formato
de /etc/passwd).
puts Nvel: 3
Prottipo: int puts(const char *s);
Retorno: >0 se OK
EOF se houve erro
Header: #include <stdio.h>
Descrio: Grava uma string na sada padro.
qsort Nvel: 3
Prottipo: void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
Retorno: No tem retorno. Header: #include <stdlib.h>
Descrio: Classifica/ordena um vetor.
raise Nvel: 3
Prottipo: int raise (int sig);
Retorno: 0 se OK
<0 se houve erro
Header: #include <signal.h>
Descrio: Envia um sinal para o prprio processo.
Guia de Referncia das Funes 301
rand Nvel: 3
Prottipo: int rand(void);
Retorno: Nmero pseudo-randmico. Header: #include <stdlib.h>
Descrio: Gera e devolve uma seqncia de nmeros pseudo-randmicos. O va-
lor retornado ser um int entre 0 e RAND_MAX.
read Nvel: 2
Prottipo: ssize_t read(int fd, void *buf, size_t count);
Retorno: 0 Final do arquivo
# bytes lidos
-1 se houve erro
Header: #include <unistd.h>
Descrio: L bytes de um arquivo.
readv Nvel: 3
Prottipo: int readv(int filedes, const struct iovec *vector,
size_t count);
Retorno: # bytes lidos
-1 se houve erro
Header: #include <sys/uio.h>
Descrio: L informaes de vrios buffers.
realloc Nvel: 3
Prottipo: void *realloc(void *ptr, size_t);
Retorno: Ponteiro para a memria. Header: #include <stdlib.h>
Descrio: Realocao dinmica de memria.
readdir Nvel: 2
Prottipo: struct dirent *readdir(DIR *dp);
Retorno: Ponteiro para estrutura
NULL se o final do diret-
rio foi alcanado.
Header: #include <sys/types.h>
#include <dirent.h>
Descrio: Retorna as informaes referentes a um diretrio.
readlink Nvel: 2
Prottipo: int readlink(const char *path, char *buf, size_t
bufsize);
Retorno: # bytes lidos se OK
-1 se houve erro.
Header: #include <unistd.h>
Descrio: L valor de uma ligao simblica
recvfrom Nvel: 2
Prottipo: ssize_t recvfrom(int s, void *buf, size_t len int
flags, struct sockaddr *from, socklen_t *fromlen
Retorno: # bytes recebidos
-1 se houve erro
Header: #include <sys/types.h>
#include
<sys/socket.h>
Descrio: Recebe mensagens de um socket.
302 Programando em C para Linux, Unix e Windows
remove Nvel: 3
Prottipo: int remove(const char *pathname);
Retorno: 0 se OK
-1 se houve erro
Header: #include <stdio.h>
Descrio: Remove um arquivo do sistema de arquivos.
rename Nvel: 2
Prottipo: int rename(const char *oldpath, const char
*newpath);
Retorno: 0 se OK
-1 se houve erro
Header: #include <stdio.h>
Descrio: Muda de local ou renomeia um arquivo.
rewind Nvel: 3
Prottipo: void rewind( FILE *stream);
Retorno: No tem retorno. Header: #include <stdio.h>
Descrio: Seta o indicador de posio de arquivo para o incio do arquivo.
rewinddir Nvel: 3
Prottipo: void rewinddir(DIR *dir);
Retorno: No tem retorno. Header: #include <sys/types.h>
#include <dirent.h>
Descrio: Posiciona o ponteiro na primeira entrada (incio) do diretrio.
rmdir Nvel: 2
Prottipo: int rmdir(const char *pathname);
Retorno: 0 se OK
-1 se houve erro
Header: #include <unistd.h>
Descrio: Apaga um diretrio, o qual deve estar vazio.
scanf Nvel: 3
Prottipo: int scanf(const char *format, ...);
Retorno: Quantidade de dados lidos.
EOF se erro
Header: #include <stdio.h>
Descrio: Leitura de dados digitados (entrada padro) de acordo com os forma-
tos utilizados (int, float, string etc.)
seekdir Nvel: 3
Prottipo: void seekdir(DIR *dir, off_t offset);
Retorno: No tem retorno. Header: #include <dirent.h>
Descrio: Pesquisa e posiciona o ponteiro na entrada correspondente.
Guia de Referncia das Funes 303
select Nvel: 2
Prottipo: int select(int n, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
Retorno: # de descritores
-1 se houve erro
Header: #include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
Descrio: Multiplexao sncrono de E/S. Aguarda a mudana de status de
um nmero de descritores de arquivo.
semctl Nvel: 2
Prottipo: int semctl(int semid, int semnum, int cmd);
Retorno: >0 se OK
-1 se houve erro
Header: #include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
Descrio: Operaes de controle de semforo.
semget Nvel: 2
Prottipo: int semget(key_t key, int nsems, int semflg);
Retorno: >0 se OK
-1 se houve erro
Header: #include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
Descrio: L/obtm um identificador para semforo.
semop Nvel: 2
Prottipo: int semop(int semid, struct sembuf *sops, unsigned
nsops);
Retorno: 0 se OK
-1 se houve erro
Header: #include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
Descrio: Operaes de semforo.
send Nvel: 2
Prottipo: ssize_t send(int s, const void *buf, size_t len int
flags);
Retorno: # bytes enviados
-1 se houve erro
Header: #include <sys/types.h>
#include
<sys/socket.h>
Descrio: Envia mensagem para o socket.
sendto Nvel: 2
Prottipo: ssize_t sendto(int s, const void *buf, size_t len int
flags, const struct sockaddr *to, socklen_t tolen);
Retorno: # bytes enviados
-1 se houve erro
Header: #include <sys/types.h>
#include
<sys/socket.h>
Descrio: Envia mensagem para o socket.
304 Programando em C para Linux, Unix e Windows
setbuf Nvel: 3
Prottipo: void setbuf(FILE *stream, char *buf);
Retorno: 0 se OK
<0 se houve erro
Header: #include <stdio.h>
Descrio: Seta as operaes (comportamento) de buffer do arquivo.
setbuffer Nvel: 3
Prottipo: void setbuffer(FILE *stream, char *buf, size_tsize);
Retorno: 0 se OK
<0 se houve erro
Header: #include <stdio.h>
Descrio: Seta as operaes (comportamento) de buffer do arquivo.
setenv Nvel: 3
Prottipo: int setenv(const char *name, const char *value, int
overwrite);
Retorno: 0 se OK
-1 se houve erro
Header: #include <stdlib.h>
Descrio: Cria ou modifica uma varivel de ambiente (similar a putenv).
seteuid Nvel: 2
Prottipo: int seteuid(uid_t euid);
Retorno: 0 se OK
-1 se houve erro
Header: #include <sys/types.h>
#include <unistd.h>
Descrio: Seta o ID efetivo do usurio no processo.
setegid Nvel: 2
Prottipo: int setegid(gid_t egid);
Retorno: 0 se OK
-1 se houve erro
Header: #include <sys/types.h>
#include <unistd.h>
Descrio: Seta o GID efetivo do grupo no processo.
setgid Nvel: 2
Prottipo: int setgid(gid_t gid);
Retorno: 0 se OK
-1 se houve erro
Header: #include <unistd.h>
#include <sys/types.h>
Descrio: Seleciona a identidade de grupo efetiva do processo atual.
setgrent Nvel: 3
Prottipo: void setgrent(void);
Retorno: No tem retorno. Header: #include <grp.h>
#include <sys/types.h>
Descrio: Retorna o ponteiro do arquivo para o incio de /etc/group.
Guia de Referncia das Funes 305
setgroups Nvel: 2
Prottipo: int setgroups(size_t size, const gid_t *list);
Retorno: 0 se OK
-1 se houve erro.
Header: #include <sys/types.h>
#include <unistd.h>
Descrio: Seleciona os grupos suplementares para o processo. Somente o supe-
rusurio pode usar esta funo.
sethostid Nvel: 2
Prottipo: int sethostid(long hostid);
Retorno: Identificador da mquina Header: #include <unistd.h>
Descrio: Seta o identificador do host (armazenado em /etc/hostid).
sethostname Nvel: 2
Prottipo: int sethostname(const char *name, size_t len);
Retorno: 0 se OK
-1 se houve erro
Header: #include <unistd.h>
Descrio: Altera o nome do host do sistema em uso.
setlinebuf Nvel: 3
Prottipo: void setlinebuf(FILE *stream);
Retorno: 0 se OK
<0 se houve erro
Header: #include <stdio.h>
Descrio: Seta as operaes (comportamento) de buffer do arquivo.
setlocale Nvel: 3
Prottipo: char *setlocale(int category, const char * locale);
Retorno: Ponteiro para string
NULL se houve erro
Header: #include <locale.h>
Descrio: Seta/obtm as configuraes locais do sistema operacional.
setpgid Nvel: 2
Prottipo: int setpgid(pid_t pid, pid_t pgid);
Retorno: 0 se OK
-1 se houve erro
Header: #include <unistd.h>
Descrio: Seta o identificador de grupo para o processo.
setpgrp Nvel: 2
Prottipo: int setpgrp(void);
Retorno: 0 se OK
-1 se houve erro
Header: #include <unistd.h>
Descrio: Seta o identificador de grupo para o processo. Equivalente a
setpgid(0,0).
306 Programando em C para Linux, Unix e Windows
setpwent Nvel: 3
Prottipo: void setpwent(void);
Retorno: No tem retorno. Header: #include <sys/types.h>
#include <pwd.h>
Descrio: Reposiciona o ponteiro para o incio do arquivo /etc/passwd.
settimeofday Nvel: 2
Prottipo: int settimeofday(const struct timeval *tv , const
struct timezone *tz);
Retorno: 0 se OK
-1 se houve.
Header: #include <sys/time.h>
Descrio: Seta a hora do sistema.
setsid Nvel: 2
Prottipo: pid_t setsid(void);
Retorno: ID da sesso
-1 se houve erro.
Header: #include <unistd.h>
#include <sys/types.h>
Descrio: Cria uma nova sesso se o processo chamador no um lder de gru-
po de processo. Torna o processo lder da sesso.
setuid Nvel: 2
Prottipo: int setuid(uid_t uid);
Retorno: 0 se OK
-1 se houve erro
Header: #include <sys/types.h>
#include <unistd.h>
Descrio: Seleciona a ID efetiva de usurio do processo atual.
setvbuf Nvel: 3
Prottipo: int setvbuf(FILE *stream, char *buf, int mode ,
size_t size);
Retorno: 0 se OK
<0 se houve erro
Header: #include <stdio.h>
Descrio: Seta as operaes (comportamento) de buffer do arquivo.
shutdown Nvel: 2
Prottipo: int shutdown(int s, int how);
Retorno: 0 se OK
-1 se houve erro
Header: #include
<sys/socket.h>
Descrio: Faz todas, ou partes, das conexes full-duplex em um socket, associ-
ado com s serem fechados.
siginterrupt Nvel: 3
Prottipo: int siginterrupt(int sig, int flag);
Retorno: 0 se OK
-1 se houve erro
Header: #include <signal.h>
Descrio: Habilita um sinal para interromper uma chamada de sistema.
Guia de Referncia das Funes 307
sleep Nvel: 3
Prottipo: unsigned int sleep(unsigned int seconds);
Retorno: 0 se terminou o tempo in-
formado
# segundos que faltavam
para o trmino.
Header: #include <unistd.h>
Descrio: Paraliza o processo (dorme) com a quantidade de segundos informado.
signal Nvel: 2
Prottipo: typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
Retorno: Outros sinais se OK
SIG_ERR em caso de erro
Header: #include <signal.h>
Descrio: Instala uma funo para tratar os sinais que o processo recebe.
sin Nvel: 3
Prottipo: double sin(double num);
Retorno: Seno de num. Header: #include <math.h>
Descrio: Devolve o seno de nmero. Nmero deve ser informado em radianos.
socket Nvel: 2
Prottipo: int socket(int domain, int type, int protocol);
Retorno: Descritor para arquivos
-1 se houve erro.
Header: #include <sys/types.h>
#include
<sys/socket.h>
Descrio: Cria um socket para comunicao.
sprintf Nvel: 3
Prottipo: int sprintf(char *string, const char * format,
[Value, ]);
Retorno: >0 se ok
<0 em caso de erro
Header: #include <stdio.h>
Descrio: Formata uma sada e coloca em uma string.
sqrt Nvel: 3
Prottipo: double sqrt(double num);
Retorno: Raiz Quadrada ou erro. Header: #include <math.h>
Descrio: Devolve a raiz quadrada do nmero ou erro se nmero for negativo.
srand Nvel: 3
Prottipo: void srand(int seed);
Retorno: No tem retorno. Header: #include <stdlib.h>
Descrio: Estabelece um ponto de partida para uma seqncia gerada pela fun-
o rand.
308 Programando em C para Linux, Unix e Windows
stat Nvel: 2
Prottipo: int stat(const char *file_name, struct stat *buf);
Retorno: 0 se OK
-1 se houve erro
Header: #include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
Descrio: Retorna informaes a respeito de um arquivo.
stime Nvel: 2
Prottipo: int stime(time_t *t);
Retorno: 0 se OK
-1 se houve erro
Header: #include <time.h>
Descrio: Ajusta a hora e a data do sistema.
strcasecmp Nvel: 3
Prottipo: int strcasecmp(const char *s1, const char *s2);
Retorno: 0 se iguais
<0 se s1 < s2
>0 se s1 > s2
Header: #include <string.h>
Descrio: Compara duas strings ignorando se so maisculas ou minsculas.
strcat Nvel: 3
Prottipo: char *strcat(char *dest, const char *src);
Retorno: Ponteiro para string Header: #include <string.h>
Descrio: Concatena string origem na string destino.
strchr Nvel: 3
Prottipo: char *strchr(const char *s, int c);
Retorno: Ponteiro para string
NULL se no existir o ca-
ractere
Header: #include <string.h>
Descrio: Retorna a primeira ocorrncia do caractere na string.
strcmp Nvel: 3
Prottipo: int strcmp(const char *s1, const char *s2);
Retorno: 0 se iguais
<0 se s1 < s2
>0 se s1 > s2
Header: #include <string.h>
Descrio: Compara duas strings para verificar se so iguais.
strcoll Nvel: 3
Prottipo: int strcoll(const char *s1, const char *s2);
Retorno: 0 se iguais
<0 se s1 < s2
>0 se s1 > s2
Header: #include <string.h>
Descrio: Compara duas strings para verificar se so iguais (utilizando as confi-
guraes locais para a verificao, veja setlocale).
Guia de Referncia das Funes 309
strcpy Nvel: 3
Prottipo: char *strcpy(char *dest, const char *src);
Retorno: Ponteiro para a string
destino.
Header: #include <string.h>
Descrio: Copia uma string (src) para outra (dest).
strdup Nvel: 3
Prottipo: char *strdup(const char *s);
Retorno: Ponteiro para a string Header: #include <string.h>
Descrio: Duplica uma string.
strerror Nvel: 3
Prottipo: char *strerror(int errnum);
Retorno: Ponteiro para a string Header: #include <string.h>
Descrio: Retorna uma string contendo o erro indicado.
strftime Nvel: 3
Prottipo: size_t strftime(char *s, size_t max, const char
*format const struct tm *tm);
Retorno: # caracteres colocados na
string
Header: #include <time.h>
Descrio: Formata uma data/hora em um string conforme os parmetros especi-
ficados.
strlen Nvel: 3
Prottipo: size_t strlen (const char *string)
Retorno: Tamanho da string Header: #include <string.h>
Descrio: Retorna o tamanho de uma string terminada com \0 (NULL)
strncasecmp Nvel: 3
Prottipo: int strncasecmp(const char *s1, const char *s2,
size_t n);
Retorno: 0 se iguais
<0 se s1 < s2
>0 se s1 > s2
Header: #include <string.h>
Descrio: Compara duas strings (at n caracteres) ignorando se so maisculas
ou minsculas.
strncat Nvel: 3
Prottipo: char *strncat(char *dest, const char *src, size_t
n);
Retorno: Ponteiro para string Header: #include <string.h>
Descrio: Concatena string origem na string destino (at n bytes).
310 Programando em C para Linux, Unix e Windows
strncmp Nvel: 3
Prottipo: int strncmp(const char *s1, const char *s2, size_t
n);
Retorno: 0 se iguais
<0 se s1 < s2
>0 se s1 > s2
Header: #include <string.h>
Descrio: Compara duas strings (at n bytes) para verificar se so iguais.
strncpy Nvel: 3
Prottipo: char *strncpy(char *dest, const char *src, size_t
n);
Retorno: Ponteiro para a string
destino.
Header: #include <string.h>
Descrio: Copia uma n bytes de string (src) para outra (dest)
strnlen Nvel: 3
Prottipo: size_t strnlen (const char *s, size_t maxlen);
Retorno: # de bytes Header: #include <string.h>
Descrio: Retorna a quantidade de bytes da string at o mximo indicado.
strpbrk Nvel: 3
Prottipo: char *strpbrk(const char *s, const char *accept);
Retorno: Ponteiro para string
NULL se no encontrou
Header: #include <string.h>
Descrio: Pesquisa e retorna a primeira ocorrncia de accept em s.
strptime Nvel:
Prottipo: char *strptime(const char *s, const char *formato,
struct tm *tm);
Retorno: Ponteiro para string
NULL se no ocorreu a
converso
Header: #include <time.h>
Descrio: Converte uma representao de hora do tipo string para uma estrutura
de hora tm.
strrchr Nvel: 3
Prottipo: char *strrchr(const char *s, int c);
Retorno: Ponteiro para string
NULL se no existir o ca-
ractere
Header: #include <string.h>
Descrio: Retorna a ltima ocorrncia do caractere na string.
Guia de Referncia das Funes 311
strstr Nvel: 3
Prottipo: char *strstr(const char *haystack, const char *needle);
Retorno: Ponteiro para string
NULL se no encontrou
Header: #include <string.h>
Descrio: Procura uma substring dentro de uma string maior.
strtok Nvel: 3
Prottipo: char *strtok(char *s, const char *delim);
Retorno: Ponteiro para a prxima
posio
NULL se no existe ou se
chegou ao final da string.
Header: #include <string.h>
Descrio: Retorna um token (posio) do delimitador dentro da string.
sscanf Nvel: 3
Prottipo: int sscanf(const char *str, const char *format,
...);
Retorno: # de dados lidos.
EOF se erro
Header: #include <stdio.h>
Descrio: L os dados de uma string. A leitura realizada de forma similar
funo scanf.
symlink Nvel: 2
Prottipo: int symlink(const char *oldpath, const char *newpath);
Retorno: 0 se OK
-1 se houve erro
Header: #include <unistd.h>
Descrio: Cria um link simblico para o arquivo.
sync Nvel: 2
Prottipo: int sync(void);
Retorno: 0 sempre. Header: #include <unistd.h>
Descrio: Sincroniza as informaes que esto no cache do sistema com o disco.
sysconf Nvel: 3
Prottipo: long sysconf(int name);
Retorno: Configurao do ambiente Header: #include <unistd.h>
Descrio: Obtm informaes de configurao do sistema operacional em tempo
de execuo.
syslog Nvel: 3
Prottipo: void syslog( int priority, char *format, ...);
Retorno: No tem retorno. Header: #include <syslog.h>
Descrio: Gera e envia mensagens para o sistema de logs do sistema operacio-
nal.
312 Programando em C para Linux, Unix e Windows
sysctl Nvel: 2
Prottipo: int sysctl(struct __sysctl_args *args);
Retorno: 0 se OK
-1 se houve erro
Header: #include <unistd.h>
#include
<linux/unistd.h>
#include
<linux/sysctl.h>
Descrio: L/escreve parmetros do sistema/kernel. Por exemplo:nome da m-
quina, nmero mximo de arquivos abertos.
system Nvel: 3
Prottipo: int system (const char * string);
Retorno: >0 se OK
127 se no foi possvel
executar
-1 se houve algum erro
Header: #include <stdlib.h>
Descrio: Executa um comando no sistema operacional.
tan Nvel: 3
Prottipo: double tan(double num);
Retorno: Tangente de num. Header: #include <math.h>
Descrio: Devolve a tangente do nmero. Nmero deve ser informado em radianos.
telldir Nvel: 3
Prottipo: off_t telldir(DIR *dir);
Retorno: Posio atual
-1 se houve erro.
Header: #include <dirent.h>
Descrio: Retorna a posio atual dentro da estrutura de diretrios.
tempnam Nvel: 3
Prottipo: char *tempnam(const char *dir, const char *pfx);
Retorno: Ponteiro para o nome Header: #include <stdio.h>
Descrio: Retorna um nome de arquivo temporrio nico para uso no sistema
operacional.
time Nvel: 2
Prottipo: time_t time(time_t *t);
Retorno: Tempo em segundos. Header: #include <time.h>
Descrio: Retorna o tempo desde 01 de Janeiro de 1970 s 00:00:00 UTC, me-
dido em segundos.
times Nvel: 2
Prottipo: clock_t times(struct tms *buf);
Retorno: Nmero de tiques do rel-
gio desde que foi ativado.
Header: #include <sys/times.h>
Descrio: Armazena o tempo do processo atual em buf.
Guia de Referncia das Funes 313
tmpfile Nvel: 3
Prottipo: FILE *tmpfile (void);
Retorno: Ponteiro para arquivo
NULL se houve erro
Header: #include <stdio.h>
Descrio: Cria um arquivo temporrio nico para uso dentro do sistema opera-
cional.
tmpnam Nvel: 3
Prottipo: char *tmpnam(char *s);
Retorno: Ponteiro para nome
NULL se houve erro
Header: #include <stdio.h>
Descrio: Cria um nome para arquivo temporrio.
toascii Nvel: 3
Prottipo: int toascii (int c);
Retorno: Caractere convertido. Header: #include <ctype.h>
Descrio: Converte um caractere para o seu cdigo ASCII.
toupper Nvel: 3
Prottipo: int toupper (int c);
Retorno: Caractere convertido. Header: #include <ctype.h>
Descrio: Converte um caractere para maiscula.
tolower Nvel: 3
Prottipo: int tolower (int c);
Retorno: Caractere convertido. Header: #include <ctype.h>
Descrio: Converte um caractere para minscula.
trunc Nvel: 3
Prottipo: double trunc(double x);
Retorno: Nmero Header: #include <math.h>
Descrio: Trunca o nmero (arredonda).
truncate Nvel: 2
Prottipo: int truncate(const char *path, off_t length);
Retorno: 0 se OK
-1 se houve erro
Header: #include <unistd.h>
#include <sys/types.h>
Descrio: Trunca o arquivo conforme o tamanho passado.
umask Nvel: 2
Prottipo: mode_t umask(mode_t mask);
Retorno: Mscara anterior. Header: #include <sys/types.h>
#include <sys/stat.h>
Descrio: Seleciona a mscara de criao dos arquivos.
314 Programando em C para Linux, Unix e Windows
umount Nvel: 2
Prottipo: int umount(const char *target);
int umount2(const char *target, int flags);
Retorno: 0 se OK
-1 se houve erro
Header: #include <sys/mount.h>
Descrio: Desmonsta um sistema de arquivos montado atravs de mount.
uname Nvel: 2
Prottipo: int uname(struct utsname *buf);
Retorno: 0 se OK
-1 se houve erro
Header: #include
<sys/utsname.h>
Descrio: Obtm o nome e as informaes sobre o sistema atual.
unlink Nvel: 2
Prottipo: int unlink(const char *pathname);
Retorno: 0 se OK
-1 se houve erro
Header: #include <unistd.h>
Descrio: Apaga um nome a partir do sistema de arquivos; se o nome tem a l-
tima ligao (inode) no sistema de arquivos, o arquivo removido e o
inode liberado.
unsetenv Nvel: 3
Prottipo: void unsetenv(const char *name);
Retorno: No tem retorno. Header: #include <stdlib.h>
Descrio: Remove uma varivel de ambiente.
usleep Nvel: 3
Prottipo: void usleep(unsigned long usec);
Retorno: No tem retorno. Header: #include <unistd.h>
Descrio: Suspende a execuo do processo em microssegundos.
utime Nvel: 2
Prottipo: int utime(const char *filename, struct utimbuf
*buf);
Retorno: 0 se OK
-1 se houve erro
Header: #include <sys/types.h>
#include <utime.h>
Descrio: Altera a data de acesso ou modificao de um inode.
va_end Nvel: 3
Prottipo: void va_end( va_list ap);
Retorno: No tem retorno. Header: #include <stdarg.h>
Descrio: Finaliza a lista de parmetros variveis que uma funo pode receber.
Guia de Referncia das Funes 315
va_copy Nvel: 3
Prottipo: void va_copy(va_list dest, va_list src);
Retorno: No tem retorno. Header: #include <stdarg.h>
Descrio: Copia uma lista de parmetros para outra.
va_start Nvel: 3
Prottipo: void va_start( va_list ap, last);
Retorno: No tem retorno. Header: #include <stdarg.h>
Descrio: Inicializa a lista de parmetros variveis que uma funo pode rece-
ber.
wait Nvel: 2
Prottipo: pid_t wait(int *status);
Retorno: PID do filho
-1 se houve erro
Header: #include <sys/types.h>
#include <sys/wait.h>
Descrio: Aguarda o trmino do filho.
waitpid Nvel: 2
Prottipo: pid_t waitpid(pid_t pid, int *status, int options);
Retorno: PID do filho
-1 se houve erro
Header: #include <sys/types.h>
#include <sys/wait.h>
Descrio: Verifica se um processo filho terminou e com qual status.
write Nvel: 2
Prottipo: ssize_t write(int fd, const void *buf, size_t
count);
Retorno: # bytes gravados
-1 se houve erro
Header: #include <unistd.h>
Descrio: Grava bytes em um arquivo.
writev Nvel: 3
Prottipo: int writev(int filedes, const struct iovec *vector,
size_t count);
Retorno: # bytes gravados
-1 se houve erro
Header: #include <sys/uio.h>
Descrio: Grava informaes em vrios buffers.
317
Bibliografia
Advanced Programming in the Unix Environment. Stevens, W. Richard. Editora
Addison Wesley Pub.
C Completo e Total. Schildt, Hebert. Editora Makron Books.
Guia Completo ao Teste de Software. Hetzel, William. Editora Campus.
Unix Networking Programming Networking Apis-Sockets and XTI. Stevens,
W. Richard. Editora Prentice Hall.
Unix Networking Programming Interprocess Communications. Stevens, W.
Richard. Editora Prentice Hall.
319
ndice Remissivo
#
#define 58
#else 59
#endif 59
#error 65
#if 59
#ifdef 62
#ifndef 62
#include 57
#undef 63
?
? 35
A
accept 214
access 171
Ajuda 247
ANSI 95
asctime 131
atexit 54
B
bind 210
Bolha 241
break 42
C
C ANSI 4
C ISO 4
C99 5
calloc 116
Case Sensitive 10
clearerr 110
close 155, 218
connect 212
Constantes 6
continue 43
creat 154
Criao de processos 178
ctime 131
D
daemon 200
do...while 41
E
errno 138
Erros 138, 205
320 Programando em C para Linux, Unix e Windows
Estruturas 120
execl 185
exit 45
extern 52
F
fclose 98
feof 104
ferror 110
fflush 108
fopen 96
for 39
fork 179
fprintf 105
fread 99
free 115
fscanf 106
fseek 103
ftell 109
Funes 47, 48, 271
_exit Erro! Indicador no definido.
abort Erro! Indicador no definido.
abs Erro! Indicador no definido.
accept Erro! Indicador no definido.
access Erro! Indicador no definido.
acos Erro! Indicador no definido.
alarm Erro! Indicador no definido.
alloca Erro! Indicador no definido.
asctime Erro! Indicador no definido.
asin Erro! Indicador no definido.
assert Erro! Indicador no definido.
atan Erro! Indicador no definido.
atexit Erro! Indicador no definido.
atof Erro! Indicador no definido.
atoi Erro! Indicador no definido.
atol Erro! Indicador no definido.
atoll Erro! Indicador no definido.
basename Erro! Indicador no
definido.
bind Erro! Indicador no definido.
bsearch Erro! Indicador no definido.
calloc Erro! Indicador no definido.
cbrt Erro! Indicador no definido.
ceil Erro! Indicador no definido.
chdir Erro! Indicador no definido.
chmod Erro! Indicador no definido.
chown Erro! Indicador no definido.
chroot Erro! Indicador no definido.
clearerr Erro! Indicador no definido.
clearenv Erro! Indicador no
definido.
clock Erro! Indicador no definido.
close Erro! Indicador no definido.
closedir Erro! Indicador no definido.
closelog Erro! Indicador no
definido.
connect Erro! Indicador no
definido.
copysign Erro! Indicador no
definido.
cos Erro! Indicador no definido.
creat Erro! Indicador no definido.
crypt Erro! Indicador no definido.
ctermid Erro! Indicador no definido.
ctime Erro! Indicador no definido.
cuserid Erro! Indicador no definido.
daemon Erro! Indicador no
definido.
difftime Erro! Indicador no
definido.
dirname Erro! Indicador no
definido.
div Erro! Indicador no definido.
dup Erro! Indicador no definido.
dup2 Erro! Indicador no definido.
endgrent Erro! Indicador no
definido.
endpwent Erro! Indicador no
definido.
execl Erro! Indicador no definido.
execle Erro! Indicador no definido.
execlp Erro! Indicador no definido.
execv Erro! Indicador no definido.
execve Erro! Indicador no definido.
execvp Erro! Indicador no definido.
exit Erro! Indicador no definido.
exp Erro! Indicador no definido.
fabs Erro! Indicador no definido.
fchdir Erro! Indicador no definido.
fchmod Erro! Indicador no definido.
fchown Erro! Indicador no definido.
fclose Erro! Indicador no definido.
fcntl Erro! Indicador no definido.
fdopen Erro! Indicador no definido.
feof Erro! Indicador no definido.
ferror Erro! Indicador no definido.
ndice Remissivo 321
fflush Erro! Indicador no definido.
fgetc Erro! Indicador no definido.
fgetgrent Erro! Indicador no
definido.
fgetpwen Erro! Indicador no
definido.
fgetpos Erro! Indicador no definido.
fgets Erro! Indicador no definido.
fileno Erro! Indicador no definido.
flock Erro! Indicador no definido.
floor Erro! Indicador no definido.
fopen Erro! Indicador no definido.
fopen64 Erro! Indicador no
definido.
fork Erro! Indicador no definido.
fpathconf Erro! Indicador no
definido.
fprintf Erro! Indicador no definido.
fputc Erro! Indicador no definido.
fputs Erro! Indicador no definido.
fread Erro! Indicador no definido.
free Erro! Indicador no definido.
freopen Erro! Indicador no
definido.
freopen64 Erro! Indicador no
definido.
fscanf Erro! Indicador no definido.
fseek Erro! Indicador no definido.
fsetpos Erro! Indicador no definido.
fstat Erro! Indicador no definido.
fsync Erro! Indicador no definido.
ftell Erro! Indicador no definido.
ftime Erro! Indicador no definido.
ftruncate Erro! Indicador no
definido.
fwrite Erro! Indicador no definido.
getc Erro! Indicador no definido.
getchar Erro! Indicador no definido.
getcwd Erro! Indicador no definido.
getdate Erro! Indicador no
definido.
getegid Erro! Indicador no
definido.
getenv Erro! Indicador no definido.
geteuid Erro! Indicador no
definido.
getgid Erro! Indicador no definido.
getgrent Erro! Indicador no
definido.
getgrgid Erro! Indicador no
definido.
getgrnam Erro! Indicador no
definido.
getgroups Erro! Indicador no
definido.
gethostid Erro! Indicador no
definido.
gethostname Erro! Indicador no
definido.
getlogin Erro! Indicador no
definido.
getlogin_r Erro! Indicador no
definido.
getmsg Erro! Indicador no definido.
getopt Erro! Indicador no definido.
getpeername Erro! Indicador no
definido.
getpgid Erro! Indicador no
definido.
getpgrp Erro! Indicador no
definido.
getpid Erro! Indicador no definido.
getpmsg Erro! Indicador no
definido.
getppid Erro! Indicador no
definido.
getpwent Erro! Indicador no
definido.
getpwnam Erro! Indicador no
definido.
getpwuid Erro! Indicador no
definido.
gets Erro! Indicador no definido.
getsid Erro! Indicador no definido.
getsockname Erro! Indicador no
definido.
gmtime Erro! Indicador no
definido.
gettimeofday Erro! Indicador no
definido.
getuid Erro! Indicador no definido.
getumask Erro! Indicador no
definido.
initgroups Erro! Indicador no
definido.
isalnum Erro! Indicador no
definido.
isalpha Erro! Indicador no definido.
322 Programando em C para Linux, Unix e Windows
iscntrl Erro! Indicador no definido.
isdigit Erro! Indicador no definido.
isgraph Erro! Indicador no definido.
islower Erro! Indicador no definido.
isprint Erro! Indicador no definido.
ispunct Erro! Indicador no definido.
isspace Erro! Indicador no definido.
isupper Erro! Indicador no definido.
isxdigit Erro! Indicador no definido.
kill Erro! Indicador no definido.
killpg Erro! Indicador no definido.
labs Erro! Indicador no definido.
llabs Erro! Indicador no definido.
lchown Erro! Indicador no definido.
link Erro! Indicador no definido.
listen Erro! Indicador no definido.
localtime Erro! Indicador no
definido.
log Erro! Indicador no definido.
log10 Erro! Indicador no definido.
login Erro! Indicador no definido.
logout Erro! Indicador no definido.
lseek Erro! Indicador no definido.
lseek64 Erro! Indicador no definido.
lstat Erro! Indicador no definido.
malloc Erro! Indicador no definido.
memchr Erro! Indicador no
definido.
memcmp Erro! Indicador no
definido.
memcpy Erro! Indicador no
definido.
memmove Erro! Indicador no
definido.
memset Erro! Indicador no
definido.
mkdtemp Erro! Indicador no
definido.
mkdir Erro! Indicador no definido.
mkfifo Erro! Indicador no definido.
mknod Erro! Indicador no definido.
mkstemp Erro! Indicador no
definido.
mktemp Erro! Indicador no
definido.
mktime Erro! Indicador no definido.
mmap Erro! Indicador no definido.
mount Erro! Indicador no definido.
mremap Erro! Indicador no
definido.
msync Erro! Indicador no definido.
munmap Erro! Indicador no
definido.
nice Erro! Indicador no definido.
open Erro! Indicador no definido.
opendir Erro! Indicador no
definido.
openlog Erro! Indicador no
definido.
pause Erro! Indicador no definido.
pathconf Erro! Indicador no
definido.
pclose Erro! Indicador no definido.
perror Erro! Indicador no definido.
pipe Erro! Indicador no definido.
popen Erro! Indicador no definido.
pow Erro! Indicador no definido.
printf Erro! Indicador no definido.
psignal Erro! Indicador no definido.
ptrace Erro! Indicador no definido.
putc Erro! Indicador no definido.
putchar Erro! Indicador no
definido.
putenv Erro! Indicador no definido.
putgrent Erro! Indicador no
definido.
putpwent Erro! Indicador no
definido.
puts Erro! Indicador no definido.
qsort Erro! Indicador no definido.
raise Erro! Indicador no definido.
rand Erro! Indicador no definido.
read Erro! Indicador no definido.
readv Erro! Indicador no definido.
realloc Erro! Indicador no definido.
readdir Erro! Indicador no definido.
readlink Erro! Indicador no
definido.
recvfrom Erro! Indicador no
definido.
remove Erro! Indicador no definido.
rename Erro! Indicador no definido.
rewind Erro! Indicador no definido.
rewinddir Erro! Indicador no
definido.
rmdir Erro! Indicador no definido.
scanf Erro! Indicador no definido.
ndice Remissivo 323
seekdir Erro! Indicador no definido.
select Erro! Indicador no definido.
semctl Erro! Indicador no definido.
semget Erro! Indicador no definido.
semop Erro! Indicador no definido.
send Erro! Indicador no definido.
sendto Erro! Indicador no definido.
setbuf Erro! Indicador no definido.
setbuffer Erro! Indicador no
definido.
setenv Erro! Indicador no definido.
seteuid Erro! Indicador no definido.
setegid Erro! Indicador no definido.
setgid Erro! Indicador no definido.
setgrent Erro! Indicador no
definido.
setgroups Erro! Indicador no
definido.
sethostid Erro! Indicador no
definido.
sethostname Erro! Indicador no
definido.
setlinebuf Erro! Indicador no
definido.
setlocale Erro! Indicador no
definido.
setpgid Erro! Indicador no definido.
setpgrp Erro! Indicador no definido.
setpwent Erro! Indicador no
definido.
settimeofday Erro! Indicador no
definido.
setsid Erro! Indicador no definido.
setuid Erro! Indicador no definido.
setvbuf Erro! Indicador no definido.
shutdown Erro! Indicador no
definido.
siginterrupt Erro! Indicador no
definido.
sleep Erro! Indicador no definido.
signal Erro! Indicador no definido.
sin Erro! Indicador no definido.
socket Erro! Indicador no definido.
sprintf Erro! Indicador no definido.
sqrt Erro! Indicador no definido.
srand Erro! Indicador no definido.
stat Erro! Indicador no definido.
stime Erro! Indicador no definido.
strcasecmp Erro! Indicador no
definido.
strcat Erro! Indicador no definido.
strchr Erro! Indicador no definido.
strcmp Erro! Indicador no definido.
strcoll Erro! Indicador no definido.
strcpy Erro! Indicador no definido.
strdup Erro! Indicador no definido.
strerror Erro! Indicador no definido.
strftime Erro! Indicador no
definido.
strlen Erro! Indicador no definido.
strncasecmp Erro! Indicador no
definido.
strncat Erro! Indicador no definido.
strncmp Erro! Indicador no
definido.
strncpy Erro! Indicador no definido.
strnlen Erro! Indicador no definido.
strpbrk Erro! Indicador no definido.
strptime Erro! Indicador no
definido.
strrchr Erro! Indicador no definido.
strstr Erro! Indicador no definido.
strtok Erro! Indicador no definido.
sscanf Erro! Indicador no definido.
symlink Erro! Indicador no definido.
sync Erro! Indicador no definido.
sysconf Erro! Indicador no definido.
syslog Erro! Indicador no definido.
sysctl Erro! Indicador no definido.
system Erro! Indicador no definido.
tan Erro! Indicador no definido.
telldir Erro! Indicador no definido.
tempnam Erro! Indicador no
definido.
time Erro! Indicador no definido.
times Erro! Indicador no definido.
tmpfile Erro! Indicador no definido.
tmpnam Erro! Indicador no
definido.
toascii Erro! Indicador no definido.
toupper Erro! Indicador no
definido.
tolower Erro! Indicador no
definido.
trunc Erro! Indicador no definido.
truncate Erro! Indicador no
definido.
324 Programando em C para Linux, Unix e Windows
umask Erro! Indicador no definido.
umount Erro! Indicador no
definido.
uname Erro! Indicador no definido.
unlink Erro! Indicador no definido.
unsetenv Erro! Indicador no
definido.
usleep Erro! Indicador no definido.
utime Erro! Indicador no definido.
va_end Erro! Indicador no definido.
va_copy Erro! Indicador no
definido.
va_start Erro! Indicador no
definido.
wait Erro! Indicador no definido.
waitpid Erro! Indicador no definido.
write Erro! Indicador no definido.
writev Erro! Indicador no definido.
fwrite 100
G
getchar 25
geteuid 168
gethostbyname 220
getpeername 219
getpid 166
getppid 166
getuid 168
gmtime 132
goto 44
H
htonl 209
htons 209
I
if 33
if...else... 34
inet_addr 211
inet_aton 211
inet_ntoa 211
K
K&R 4
kill 193
L
LCC-Win32 255
Linux 166, 188, 247
listen 213
localtime 132
lseek 159
M
main 9
malloc 114
Matrizes 70, 72, 89, 126
Memria 113
memset 118
mktime 134
N
ntohl 209
ntohs 209
O
open 149
Ordenao 241
P
Palavras Reservadas 11
perror 140
Pesquisa 244
Pointer Member 127
Ponteiros 32, 86, 127
Pr-Compilao 56
printf 20
Prottipo 47
putchar 24
ndice Remissivo 325
Q
Quicksort 242
R
raise 196
read 156
realloc 117
Recursividade 239
recv 217
recvfrom 218
remove 161
rename 164
return 49
S
scanf 24
send 215
sendto 218
setsid 202
sfrtime 135
shutdown 218
signal 191
Sinais 188
sizeof 18
sleep 198
sockaddr 208
socket 207
sprintf 82
sscanf 82
stat 172
static 53
strcat 79
strcmp 80
strcpy 80
Streams 111
strerror 139
Strings 75, 90
strlen 78
strncat 83
strncmp 85
strncpy 84
strstr 92
strtok 93
switch...case 36
syslog 205
system 187
T
TCP 221, 222, 223
time 129
typedef 17, 123
U
UDP 224, 225, 226
umask 176
uname 169
Unies 142
Unix 148, 166, 188, 247
unlink 162
V
Variveis 14, 50
Vetores 69
W
wait 181
waitpid 183
while 40
write 158
Sumrio
Introduo..................................................................................................1
1. Informaes Bsicas...............................................................................3
1.1 Histria............................................................................................................ 3
1.2 C de K&R........................................................................................................ 4
1.3 C ANSI e C ISO.............................................................................................. 4
1.4 C99 ................................................................................................................. 5
1.5 Comentrios ................................................................................................... 6
1.6 Constantes Numricas ................................................................................... 6
1.7 Outras Constantes.......................................................................................... 7
1.8 Estrutura de um Programa ............................................................................. 8
1.9 Funo main................................................................................................... 9
1.10 O que main devolve.................................................................................... 10
1.11 O C "Case Sensitive"............................................................................... 10
1.12 Palavras Reservadas do C......................................................................... 11
2. Tipos de Dados ....................................................................................12
2.1 Tipos Bsicos ............................................................................................... 12
2.2 Abrangncia e Modificadores de Tipo.......................................................... 13
2.3 Nomenclatura de Variveis .......................................................................... 14
2.4 Definio de Variveis.................................................................................. 16
2.5 Atribuio de Valores ................................................................................... 16
2.6 Definio de Constantes .............................................................................. 16
2.7 Converso de Tipos ..................................................................................... 17
2.8 Declarao typedef....................................................................................... 17
2.9 Operador sizeof ............................................................................................ 18
X Programando em C para Linux, Unix e Windows
3. Entrada e Sada....................................................................................20
3.1 Funo printf................................................................................................. 20
3.2 Formatadores de Tipos ................................................................................ 21
3.3 Indicando o Tamanho................................................................................... 21
3.4 Funo putchar............................................................................................. 24
3.5 Funo scanf ................................................................................................ 24
3.6 Funo getchar............................................................................................. 25
4. Operadores ..........................................................................................26
4.1 Operadores Aritmticos................................................................................ 26
4.2 Operadores Unrios ..................................................................................... 26
4.3 Operadores de Atribuio............................................................................. 27
4.4 Operadores Relacionais............................................................................... 28
4.5 Prioridade de Avaliao................................................................................ 28
4.6 Operadores Lgicos ..................................................................................... 29
4.7 Assinalamento de Variveis ......................................................................... 30
4.8 Parnteses e Colchetes como Operadores...................................................... 31
4.9 Operador & e * para Ponteiros ..................................................................... 32
5. Comandos de Seleo..........................................................................33
5.1 Comando if ................................................................................................... 33
5.2 Comando if...else.......................................................................................... 34
5.3 Operador ? :.................................................................................................. 35
5.4 Comando switch...case ................................................................................ 36
6. Comandos de Repetio......................................................................39
6.1 Comando for ................................................................................................. 39
6.2 Comando while............................................................................................. 40
6.3 Comando do...while...................................................................................... 41
6.4 Comando break ............................................................................................ 42
6.5 Comando continue ....................................................................................... 43
6.6 Comando goto .............................................................................................. 44
6.7 Comando exit................................................................................................ 45
7. Definies de Funes .........................................................................47
7.1 Criao de Funes ..................................................................................... 47
7.2 Funo e Prottipo (assinatura da funo) .................................................. 47
7.3 Definindo Funes........................................................................................ 48
7.4 Comando return............................................................................................ 49
7.5 Escopo de Variveis..................................................................................... 50
7.6 Variveis Globais.......................................................................................... 50
7.7 Variveis Locais ........................................................................................... 51
7.8 Definio extern............................................................................................ 52
7.9 Definio static ............................................................................................. 53
7.10 Funo atexit .............................................................................................. 54
Sumrio XI
8. Pr-Compilao....................................................................................56
8.1 Fases de uma compilao............................................................................ 56
8.2 Diretiva #include ........................................................................................... 57
8.3 Diretiva #define............................................................................................. 58
8.4 Diretivas #if, #else e #endif .......................................................................... 59
8.5 Diretivas #ifdef e #ifndef ............................................................................... 62
8.6 Diretiva #undef ............................................................................................. 63
8.7 Diretiva #error ............................................................................................... 65
8.8 Variveis predefinidas .................................................................................. 66
9. Vetores e Matrizes...............................................................................69
9.1 Definindo Vetores ......................................................................................... 69
9.2 Definindo Matrizes........................................................................................ 70
9.3 Matrizes n-Dimensionais .............................................................................. 71
9.4 Inicializando Matrizes ................................................................................... 72
9.5 Matrizes como Parmetros........................................................................... 73
10. Strings ................................................................................................75
10.1 Implementao de Strings.......................................................................... 75
10.2 Entrada/Sada de Strings ........................................................................... 76
10.3 String como vetor ....................................................................................... 77
10.4 Funo strlen.............................................................................................. 78
10.5 Funo strcat .............................................................................................. 79
10.6 Funo strcpy ............................................................................................. 80
10.7 Funo strcmp............................................................................................ 80
10.8 Funo sprintf ............................................................................................. 82
10.9 Funo sscanf ............................................................................................ 82
10.10 Funo strncat .......................................................................................... 83
10.11 Funo strncpy ......................................................................................... 84
10.12 Funo strncmp........................................................................................ 85
11. Ponteiros ............................................................................................86
11.1 Conceito Bsico.......................................................................................... 86
11.2 Definio de Ponteiros ............................................................................... 86
11.3 Uso de Ponteiros ........................................................................................ 87
11.4 Parmetros de Sada.................................................................................. 88
11.5 Operaes com Ponteiros.......................................................................... 89
11.6 Ponteiros e Matrizes................................................................................... 89
11.7 Ponteiros e Strings ..................................................................................... 90
11.8 Argumentos de Entrada.............................................................................. 91
11.9 Funo strstr............................................................................................... 92
11.10 Funo strtok............................................................................................ 93
XII Programando em C para Linux, Unix e Windows
12. Manipulao de Arquivos (padro ANSI) .........................................95
12.1 Conceitos Importantes................................................................................ 95
12.2 Ponteiro para Arquivos............................................................................... 96
12.3 Funo fopen.............................................................................................. 96
12.4 Funo fclose ............................................................................................. 98
12.5 Funo fread............................................................................................... 99
12.6 Funo fwrite ............................................................................................ 100
12.7 Funo fgets............................................................................................. 101
12.8 Funo fseek ............................................................................................ 103
12.9 Funo feof............................................................................................... 104
12.10 Funo fprintf.......................................................................................... 105
12.11 Funo fscanf ......................................................................................... 106
12.12 Funo fflush.......................................................................................... 108
12.13 Funo ftell ............................................................................................. 109
12.14 Funo ferror e clearerr.......................................................................... 110
12.15 Streams Padro...................................................................................... 111
13. Alocao de Memria......................................................................113
13.1 Configurao da Memria ........................................................................ 113
13.2 Funo malloc .......................................................................................... 114
13.3 Funo free............................................................................................... 115
13.4 Funo calloc ........................................................................................... 116
13.5 Funo realloc .......................................................................................... 117
13.6 Funo memset ........................................................................................ 118
14. Estruturas.........................................................................................120
14.1 Definio de Estruturas ............................................................................ 120
14.2 Utilizao de Estruturas............................................................................ 121
14.3 Definindo mais Estruturas ........................................................................ 122
14.4 Estruturas e o typedef .............................................................................. 123
14.5 Estruturas Aninhadas ............................................................................... 124
14.6 Estruturas e Matrizes................................................................................ 126
14.7 Estruturas e Ponteiros .............................................................................. 127
14.8 Pointer Member ........................................................................................ 127
15. Data e Hora......................................................................................129
15.1 Funo time.............................................................................................. 129
15.2 Trabalhando com datas............................................................................ 130
15.3 Funes asctime e ctime.......................................................................... 131
15.4 Funes gmtime e localtime..................................................................... 132
15.5 Funo mktime......................................................................................... 134
15.6 Funo sfrtime.......................................................................................... 135
Sumrio XIII
16. Tratamento de Erros........................................................................138
16.1 Varivel errno ........................................................................................... 138
16.2 Funo strerror ......................................................................................... 139
16.3 Funo perror ........................................................................................... 140
17. Definies Avanadas......................................................................142
17.1 Definio de Unies ................................................................................. 142
17.2 Utilizao de Unies................................................................................. 142
17.3 Lista Enumerada ...................................................................................... 143
17.4 Estruturas de Bits ..................................................................................... 144
17.5 Operadores Bit a Bit ................................................................................. 145
17.6 Deslocamento de Bits............................................................................... 146
17.7 Deslocamento de Bits Circular ................................................................. 147
18. Manipulao de Arquivos (padro Linux e Unix)...........................148
18.1 O Sistema de Arquivo Tipo Unix .............................................................. 148
18.2 Descritores Pr-alocados ......................................................................... 149
18.3 Funo open............................................................................................. 149
18.4 Funo creat............................................................................................. 154
18.5 Funo close ............................................................................................ 155
18.6 Funo read.............................................................................................. 156
18.7 Funo write ............................................................................................. 158
18.8 Funo lseek ............................................................................................ 159
18.9 Funo remove......................................................................................... 161
18.10 Funo unlink ......................................................................................... 162
18.11 Funo rename ...................................................................................... 164
19. Buscando Algumas Informaes no Linux e Unix ..........................166
19.1 Funes getpid e getppid ......................................................................... 166
19.2 Funes getuid e geteuid ......................................................................... 168
19.3 Funo uname.......................................................................................... 169
19.4 Funo access ......................................................................................... 171
19.5 Funo stat ............................................................................................... 172
19.6 Funo umask .......................................................................................... 176
20. Criando Processos no Linux e Unix .................................................178
20.1 Criao de processos no sistema operacional......................................... 178
20.2 Funo fork............................................................................................... 179
20.3 Funo wait .............................................................................................. 181
20.4 Funo waitpid ......................................................................................... 183
20.5 Funo execl ............................................................................................ 185
20.6 Funo system......................................................................................... 187
XIV Programando em C para Linux, Unix e Windows
21. Tratamento de Sinais em Linux e Unix...........................................188
21.1 Conceito e tratamento de Sinais .............................................................. 188
21.2 Alguns Sinais............................................................................................ 190
21.3 Funo signal ........................................................................................... 191
21.4 Funo kill................................................................................................. 193
21.5 Funo raise............................................................................................. 196
21.6 Funo sleep ............................................................................................ 198
21.7 Cuidados com algumas funes (funes reentrantes)........................... 199
22. Daemons (Servios) em Linux e Unix..............................................200
22.1 Conceito de daemon ................................................................................ 200
22.2 Regras para codificao de um daemon..................................................... 200
22.3 Funo setsid ........................................................................................... 202
22.4 Registrando erros com a funo syslog................................................... 205
23. Programao para Rede ..................................................................207
23.1 Funo socket .......................................................................................... 207
23.2 Estrutura sockaddr ................................................................................... 208
23.3 Funes htonl, htons, ntohl, ntohs ........................................................... 209
23.4 Funo bind.............................................................................................. 210
23.5 Funes inet_aton, inet_addr e inet_ntoa................................................ 211
23.6 Funo connect ........................................................................................ 212
23.7 Funo listen ............................................................................................ 213
23.8 Funo accept .......................................................................................... 214
23.9 Funo send............................................................................................. 215
23.10 Funo recv............................................................................................ 217
23.11 Funes sendto e recvfrom.................................................................... 218
23.12 Funes close e shutdown..................................................................... 218
23.13 Funo getpeername ............................................................................. 219
23.14 Funo gethostbyname.......................................................................... 220
23.15 Diagrama de servidor/cliente TCP bsico.............................................. 221
23.16 Exemplo completo de um servidor TCP..................................................... 222
23.17 Exemplo completo de um cliente TCP................................................... 223
23.18 Diagrama de servidor/cliente UDP bsico.............................................. 224
23.19 Exemplo completo de um servidor UDP ................................................ 225
23.20 Exemplo completo de um cliente UDP................................................... 226
24. Tcnicas de Programao para Facilitar a Depurao,
24. Documentao, Economia e Execuo de Processos......................228
Apndice A. Programas Avanados ......................................................239
A.1 Recursividade............................................................................................. 239
A.2 Ordenao.................................................................................................. 241
A.3 Pesquisa..................................................................................................... 244
Sumrio XV
Apndice B. Ajuda .................................................................................247
B.1 Obtendo ajuda no Linux e Unix.................................................................. 247
B.2 Sees do Manual ..................................................................................... 247
B.3 Diviso da Documentao ......................................................................... 248
B.4 Exemplo de Utilizao................................................................................ 248
Apndice C. Compilando no Linux........................................................251
Apndice D. Utilizando o LCC-Win32....................................................255
D.1 Instalao................................................................................................... 255
D.2 Criando Projetos no LCC-Win32................................................................ 261
D.2.1 Criando um projeto .......................................................................... 262
D.3 Criando um Programa e Compilando ........................................................ 267
Apndice E. Guia de Referncia das Funes .......................................271
Bibliografia ............................................................................................317
ndice Remissivo ....................................................................................319