MC823 - Laboratório de Redes de Computadores

Prof. Célio Guimarães     IC - Unicamp
Atualizado em 22-Set-2008

Métodos de "Buferização" da "Biblioteca Padrão" da linguagem C

A "Biblioteca Padrão" ("Standard Library") foi introduzida pelas criadores do UNIX para facilitar a preparação de documentos textuais. Ela provê um nível de abstração adicional entre uma aplicação em C e o "raw I/O" do Unix que usa as funções "read", "write", "lseek", etc. Ela usa recursos internos de buferização a serem descritos e que também podem ser usados com sockets. A biblioteca padrão usa "FILE pinters" para acessasr arquivos. Usualmente arquivos são usados para acesso num só sentido, leitura ou escrita. A função fdopen() permite criar um FILE * a partir de um descritor de arquivo (ou de socket) com um segundo parametro indicando seo acesso é para leitura ("r") ou escrita "w"). Como sockets permitem comunicação bidirecional, dois FILE *'s podem ser criados a partir de um descritor de socket, um para leitura e outro para escrita, para serem usados tipicamente com as funções fgets() e fputs(), respectivamente, para leitura e escrita de linhas de caracteres (delimitadas pel caracter "\n"), ou seja, uma vez criados os FILE *'s apropriados a partir de um descritor dde socket, podemos substituir as funções recv() e send() da biblioteca de sockets pelas funcões fgets() e fputs() com o objetivo de, a nivel da aplicação, ler e escrever mensagens que sejam linhas de caracteres o que não é suportadado pelo protocolo TCP. O problema adicional que surge está nos métodos intrínsecos ("default") de buferização feitos pela biblioteca padrão e que derrotariam o nosso objetivo: É preciso então um recurso adicional a fim de forçar que as funções fgets() e fputs(), quando usadas com File *s (derivados de descritores) de arquivos ou sockets sejam "line buffered". Duas funções podem ser usadas com esse objetivo: