Bonjour,
Je suis en train de lire Advanced Programing in the UNIX environment (une référence parait-il), et je bute sur des notions de base. Le chapitre 3 est consacré aux fichiers :
Déjà la phrase en gras me pose problème : il est dit que les fonctions traitées ne font pas appel à des procédés de buffurisation (si j'ai bien compris). Pourtant, on parle dans se chapitre des fonctions du style sync() qui servent justement à vider les buffers dans lesquels l'OS stoke les données en attente d'écriture sur le disque ! C'est bien de la buffurisation non ??We'll start our discussion of the UNIX System by describing the functions available for file I/Oopen a file, read a file, write a file, and so on. Most file I/O on a UNIX system can be performed using only five functions: open, read, write, lseek, and close. We then examine the effect of various buffer sizes on the read and write functions.
The functions described in this chapter are often referred to as unbuffered I/O, in contrast to the standard I/O routines, which we describe in Chapter 5. The term unbuffered means that each read or write invokes a system call in the kernel. These unbuffered I/O functions are not part of ISO C, but are part of POSIX.1 and the Single UNIX Specification.
Bon à part ça je pensais avoir compris. Mais le chapitre 5 traite de la bibliothèque stdio.h, et je me demande quelle est la différence entre les fonction de cette bibliothèque, et celles vues au chaptitre 3 (write, read, open, creat, lseek + quelques autres moins importantes). En gros, c'est juste un moyen plus commode de gérer la lecture et l'écriture de fichiers c'est ça ?
Edition : j'ai aussi un problème de compréhension de ce petit passage, où il est question des deux inconvénients du line buffering. Le second inconvénient, c'est que si j'ai un flux line-bufferisé et que je veux faire un input (écrire donc des données dans un fichier), tous les flux de sortie line-bufferisés de mon programme sont vidés ? Pourquoi ça ? Par ailleurs, est-ce que ça sous-entend qu'il y a deux deux buffers par flux, un pour l'input (écrire dans le fichier), et un pour l'output (lire les données d'un fichier) ?
Bon c'est vrai que ça fait beaucoup de questions, mais ce sont des choses qui ne sont pas évidentes à comprendre tout seul...Line buffering comes with two caveats. First, the size of the buffer that the standard I/O library is using to collect each line is fixed, so I/O might take place if we fill this buffer before writing a newline. Second, whenever input is requested through the standard I/O library from either (a) an unbuffered stream or (b) a line-buffered stream (that requires data to be requested from the kernel), all line-buffered output streams are flushed. The reason for the qualifier on (b) is that the requested data may already be in the buffer, which doesn't require data to be read from the kernel. Obviously, any input from an unbuffered stream, item (a), requires data to be obtained from the kernel.
Merci d'avance des éclaircissements que vous pourrez m'apporter,
Silma
Partager