Quins són el buffer i el flux en c i quina diferència hi ha entre tots dos?


Resposta 1:

Breu: Un buffer manté les dades del flux sota flux constant.

A les C, les operacions d'E / S són asíncrones: no se sap quan tens dades ni quant. Per tant, un buffer s'utilitza generalment per recopilar dades del flux (fitxer, socket, dispositiu). Quan el buffer està complet, els consumidors d’aquest flux són notificats i poden consumir dades del buffer fins que s’esgotin. A continuació, espereu que es torni a omplir el buffer abans d’utilitzar aquestes dades.

Anem a fer una analogia amb una presa d’electricitat. Una mica d’aigua cau en un tub i fa girar una turbina, que produeix electricitat.

Així que necessiteu aigua. Surts sobre un riu. Construiu la turbina i deixeu que l'aigua del riu giri la turbina. Però ràpidament es nota alguna cosa. L’AMPLIA d’aigua no és constant. De vegades és massa, altres vegades és poc. No teniu previsibilitat. La vostra gent et maleeix perquè la televisió no funciona. O, al contrari, les bombetes de la seva sala exploten perquè donaves massa electricitat. Per tant, necessiteu que tota la vostra producció elèctrica sigui constant i previsible.

Així que construeixes una presa. La presa us ofereix un BUFFER per retenir aigua quan és massa i fer-la servir quan el riu STREAM us ofereix massa poc. D’aquesta manera pots ser constant i previsible. Si el STREAM of water no us proporciona durant molt de temps ... aviseu amb antelació als vostres clients que no podreu produir electricitat al vostre BUFFER durant un temps previsible. Sabran que desconnecteu el televisor, apagueu els llums (i escolliu un altre proveïdor d’electricitat).

Espero que això ajudi.


Resposta 2:

Jo diria que el buffer és una paraula clau. És només un nom elegant per a l'emmagatzematge temporal. I no només s’utilitza en la programació. Podeu trobar el terme en molts llocs.

Si voleu dir, per exemple, que voleu tenir un buffer de caràcters amb un màxim de 1024, escriureu una cosa així com

#definir BUFFER_SIZE 1024
// i més endavant, l’inicialitzaria
char myData [BUFFER_SIZE]

Ara teniu un buffer que emmagatzema 1024 byes en memòria per a alguna operació.

Quan s'utilitza el buffer. Diguem que teniu un consumidor i un productor, i el productor és a dir molt més ràpid que el consumidor.

Enviaríeu dades normalment al consumidor mentre emmagatzeneu en buffer la part que el consumidor no pot rebre en aquest moment.

El flux és el que el seu nom suggereix. Un flux de dades. El terme en si seria l'abstracció d'una construcció que us permetria enviar o rebre un nombre desconegut de bytes.

Sempre que escriu

printf ("Alguna cosa està aquí");

estàs iniciant un flux que imprimeix el teu missatge en la sortida estàndard.

Però no ha de ser així. Els fluxos es poden aplicar a fitxers, bases de dades i milions d’altres coses.

Però, en resum, és només un terme que es fa servir per descriure una transacció de la quantitat desconeguda de dades del vostre ordinador d'un lloc a un altre.

Potser no és 100% exacte, però crec que en fas la idea.

Salutacions.


Resposta 3:

corrent

Arxius d'E / S de fitxers en llenguatge de programació C:

  1. En C, tota l’entrada i sortida es fa amb els fluxosStream no és sinó la seqüència de bytes de data Una seqüència de bytes que surten al programa s’anomena flux d’entrada Una seqüència de bytes que surten del programa s’anomena sortida streamUse of Stream que fa que la màquina E / S independent.

Dispositiu de corrent d'entrada estàndard:

  1. Stdin significa (entrada estàndard) El teclat és un dispositiu d’entrada estàndard. L’entrada estàndard són dades (sovint text) que entren en un programa. El programa sol·licita transferències de dades mitjançant l’operació de lectura. No tots els programes requereixen entrada.

Dispositiu de flux de sortida estàndard:

  1. stdout significa (Sortida Estàndard) Pantalla (Monitor) és un dispositiu de sortida estàndard. La sortida estàndard són dades (sovint Text) sortint d’un programa. El programa envia dades al dispositiu de sortida mitjançant l’operació d’escriptura.

Buffer

El terme "buffer" és un terme molt genèric i no és específic per a IT o CS. És un lloc per emmagatzemar alguna cosa temporalment, per tal de mitigar les diferències entre la velocitat d’entrada i la velocitat de sortida. Mentre que el productor sigui més ràpid que el consumidor, el productor pot continuar emmagatzemant la producció al buffer. Quan el consumidor s’accelera, pot llegir des del buffer. El buffer es troba al centre per solucionar el buit.

Imagineu-vos que esteu menjant caramels d’un bol. Es pren una peça regularment. Per evitar que s’esgoti el bol, algú pot tornar a omplir el bol abans que es buidi, de manera que quan vulgueu agafar un altre tros, hi hagi caramels al bol.

El bol actua com a amortidor entre tu i la bossa de llaminadures.

Si estàs veient una pel·lícula en línia, el servei web es descarregarà contínuament els propers 5 minuts més o menys en un búfer, de manera que el teu ordinador no ha de descarregar la pel·lícula ja que la veus (cosa que podria penjar).

Un buffer és simplement un fragment de memòria que es fa servir per contenir dades. En el sentit més general, sol ser una sola memòria que es carrega en una operació, i es buida en una o més, l’exemple de "bol de caramelles" de Perchik.

Espero que això resolgui la vostra consulta :)

Font: Google.