# Буферирани срещу небуферирани потоци

Потокът представлява предаване на данни от една страна към друга. Файлът представлява място за съхраняване на данни на диск. Файлът използва потоци за съхранение и зареждане на данни. Буферът се използва временно за съхраняване на данните от потока.

Знаците, написани или четени от **небуфериран поток** (unbuffered stream), се предават поотделно във или от файла възможно най-скоро. Знаци, написани или четени от **напълно буфериран поток** (fully buffered), се предават към или от файла в блокове с произволен размер. Знаците, написани на **линейно буфериран поток** (line buffered stream), се предават към файла в блокове, когато се появява нов ред.

## Файлови операции на ниско ниво - небуфериран поток

Методите **open()**, **read()**, **write()**, **lseek()** са част от библиотеката **unistd.h**. Работят с файловия дескриптор **(INT)** и третират входно/изходния поток като бинарни данни.

![04\_streams\_fig1.png](https://3813375884-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M50WMlRW6PAqn4gpp-_%2F-M50WNBN2Cvs5pia3MN7%2F-M50WSMrwD_ze1sMe6cy%2F04_1.png?generation=1587015977561672\&alt=media)

## Файлови операции на ниско ниво - буфериран поток

Методите **fopen()**, **fread()**, **fwrite()**, **fseek()** са част от библиотеката **stdio.h**. Използват обектния тип **FILE** и третират входно/изходния поток като текст. Операциите по четене/запис на акумулирания буфер може да бъде форсирани посредством метод **fflush()**.

![04\_streams\_fig2.png](https://3813375884-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M50WMlRW6PAqn4gpp-_%2F-M50WNBN2Cvs5pia3MN7%2F-M50WSMt25_42IxOED72%2F04_2.png?generation=1587015977398371\&alt=media)
