Concretement qu'est-ce qu'un buffer? [Fermé]

Signaler
Messages postés
23
Date d'inscription
dimanche 21 décembre 2003
Statut
Membre
Dernière intervention
1 novembre 2008
-
 non -
Bonjour, voila je suis étudiant en informatique et je suis rentré dans ces études parce que j'adore l'informatique sans pour autant m'y connaitre! alors voila en cours nous avons vu theoriquement ce qu'est un buffer ( ensemble d'octet ou sont copiés les des enregistrements, et un buffer est donc associé à un fichier )et on l'a utilisé tout le temps dans des exemples ( ex : on charge l'identifiant recherché dans tel buffer et les identifiants des enregistrement du fichier dans lequel on recherche dans un autre buffer ) mais aujourd'hui ( ca fait qd meme depuis le mois d'octobre qu'on parle de buffer et c'est maintenant que je me pose la question ) je me demande ce qu'est concretement un buffer parceque on a vu la notion de buffer overflow et je crois que dans ma vision je confond un buffer avec une variable ( j'ai commencé la programmation ) car lorsqu'on programme, qd on li une information dans un fichier, on la met dans une variable et pas dans le buffer ? donc pour moi l'overflow se faisait lorsqu'on depassé la capacité de la variable, mais je sais que ce n'est pas ca lol, donc voila j'aimerais avoir une petite " mise au poin " ce serait bien gentil, et en fait je vois sur le forum qu'on a parlé de buffer de clavier, etc ... je ne savais meme pas que ca existait lol, voila pour un etudiant en info je ne suis pas tres au courant, mais je ne demande qu'à apprendre :)
merci beaucoup d'avoir pris la peine de tout lire et de me repondre :)
a bientot
A voir également:

9 réponses

Messages postés
33212
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 047
buffer = zone mémoire de taille limitée servant à stocker des données (généralement de façon temporaire).

On utilise les buffers pour l'accès aux fichiers, mais aussi pour le réseau et pour le stockage d'un tas d'autres informations.

Buffer overflow, c'est le fait d'entrer trop de données dans le buffer, provoquant une écriture dans une zone mémoire hors du buffer (--> d'où les exploits, virus...)


Dans certains cas (Cobol), on créé des buffers qui sont exactement de la taille de chaque enregistrement du fichier qu'on veut lire.
On a définit donc une structure (numéro client, nom, adresse, code postale, ville...) et on créé un buffer de la taille exacte de cette structure.

Ainsi, on pourra par exemple lire 1 client à la fois du fichier.
C'est plus pratique.
27
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76922 internautes nous ont dit merci ce mois-ci

Messages postés
488
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
15 mars 2009
156
il y a les buffers FIFO => first in first out
on peut se représenter un bébé qu'on gave et qui salit ses couches
il y a le buffers LIFO => last in firs out
on peut se représenter un bébé qu'on gave et qui revomit tout.

Voilà un exmple de buffer concret: les intestins ! ;-)
sebsauvage
Messages postés
33212
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 047
:-D

Alors là le coup du bébé, je le connaissais pas.
Excellent ! :-)
Quelle abstraction!!!!!!!
Yop,

pour etre concis, un buffer est un tampon mémoire utilisé par un programme pour stocker temporairement ses variables.
Par exemple, lorsque tu déclares une variable avec ton langage favoris, tu alloues un buffer de la taille du type de ta variable. Le buffer overflow intervient quand tu dépasses la capacité de ce buffer et donc que tu accèdes à une zone mémoire qui ne t'est pas réservée.

++

Nico
Messages postés
23
Date d'inscription
dimanche 21 décembre 2003
Statut
Membre
Dernière intervention
1 novembre 2008
7
Ok merci, mais je venais justement de relire une partie de cours et faire le rapprochement avec le COBOL ( et oui je commence par COBOL et Fortran lol ) et en cobol on defini la taille des records des blocs, etc ... donc ca je comprend que c'est pour definir la taille et type du buffer, mais par ex en fortran non, or dans mon cours de "matériel" il dit qu'un buffer est associé a un fichier et qu'on copie les "enregistrements" or dans un enregistrement il peuy y avoir plusieurs info differentes donc plusieurs variables, donc le buffer est "subdivisés" pour faire la differences entre les variables ??? et je suppose que si on ne precise pas la longueur du buffer c pris en charge par l'OS ?
Merci

Dans la vie il y a 10 catégorie de personnes, celles qui com
prennent le binaire et celles qui ne le comprennent pas.
Messages postés
23
Date d'inscription
dimanche 21 décembre 2003
Statut
Membre
Dernière intervention
1 novembre 2008
7
Merci de vos réponses, mais alors si par exemple on est en fortran ( désolé, mais je suis en premiere année et c'est ce qu'on nous apprend :) ) la on ne définit pas les structures, et donc un buffer est alloué a chaque variable par l'OS ?? et donc la pour l'overflow il suffit d'entrer une valeur trop grande pour la variable ???

Dans la vie il y a 10 catégorie de personnes, celles qui com
prennent le binaire et celles qui ne le comprennent pas.
sebsauvage
Messages postés
33212
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 047
Désolé, je ne connais pas le Fortran.
boissonnfive
Messages postés
422
Date d'inscription
mercredi 20 décembre 2000
Statut
Membre
Dernière intervention
30 avril 2018
38
Re,

pour ta question de buffer overflow sur une variable, j'ai jeté un oeil au fortran et il semble que ce soit un langage typé. Ce qui veut dire que les variables ont des types, c'est-à-dire une taille mémoire réservé ( ainsi que des opérations et des valeurs max) pour y mettre la représentation binaire de ce type. Donc si on a un type, on ne peut pas dépasser la taille. (Fait un test d'incrémentation d'un INTEGER pour voir sa valeur max)

Le buffer overflow n'est possible que sur des tableaux car on utilise un pointeur de zone mémoire qui peut pointer dans une mauvaise zone s'il n'est pas controlé par une borne.
boissonnfive
Messages postés
422
Date d'inscription
mercredi 20 décembre 2000
Statut
Membre
Dernière intervention
30 avril 2018
38
Re,

INTEGER*4
---------
Size: 4 bytes (32 bits, bit 31 = sign)
Value range: -2147483648 to 2147483647

Donc si tu ajoutes 1 à une variable INTEGER qui vaut 2147483647, qu'est-ce qu'il se passe? Buffer overflow ou pas ?
retour au premier indice cad -2147483648, ou changement en int plus long ca depend
Messages postés
10475
Date d'inscription
mardi 6 janvier 2004
Statut
Modérateur
Dernière intervention
28 janvier 2011
692
Comme quoi, l'informaticien est poete :-)

a+
dje-dje

Il y a 10 types de personne dans le monde,
ceux qui comprennent le binaire et les autres
Messages postés
113
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
21 juin 2009
55
Espèce de binaire va.... ;-p
Messages postés
488
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
15 mars 2009
156
merci, très touché
:-D
Messages postés
422
Date d'inscription
mercredi 20 décembre 2000
Statut
Membre
Dernière intervention
30 avril 2018
38
Bonjour,

pour faire simple:

BUFFER = Zone Mémoire = Variable

Donc, quand tu crées une variable, c'est un buffer!

Par ailleurs, certaines fonctions sont dites "bufferisées". Qu'est-ce que ça veut dire?
Ça veut dire qu'elles travaillent sur une zone mémoire et pas sur les données physique.
Pourquoi elles font ça? Parce-que l'accès au matériel est plus lent que l'accès à la mémoire. En travaillant sur la mémoire, on est indépendant de la vitesse du matériel.
Ces fonctions ont donc toujours une fonction qui permet d'écrire le buffer sur le matériel.

Ex concret: l'écriture dans un fichier en C

fopen: cette fonction va lire les données sur le disque et les placer dans un buffer sur lequel on va pouvoir travailler
fwrite: écrit dans le buffer (pas sur le disque)
fflush: vide le buffer (écrit les données sur le disque)
fclose: permet aussi de vider le buffer