# Търсене в файлове и откъслечни файлове

```c
#include<stdio.h>
FILE *fopen(const char *pathname, const char *mode);
size_t fread(void *ptr, size_t size, size_t nmemb, FOLE *stream);
int fseek(FILE *stream. long offset, int whence);
int fclose(FILE *stream);
```

* Поведението на **fseek()** зависи от аргумента: **SEEK\_CUR**, **SEEK\_END** или **SEEK\_SET**.
* Методът връща новата позиция на файла при успех.
* При грешка в резултат се връща -1, а информация за грешката се записва във **errno**.
* Търсене след края на файла и след това писане в него причинява дупки (**holes**) запълнени с нули.
* Файлове с дупки се наричат откъслечни файлове (**sparse files**).
* Дупките не заемат физически дисково пространство.
* **du** = оценка на използваното дисково пространство от файла.

| Аргумент  | Пояснение                                                                                                                                                                                                             |
| --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| SEEK\_CUR | Взима се стойността на текущата файлова позиция (**fd**) плюс стойността **POS**, която може да бъде отрицателна, нулева или положителна. **POS** от нула връща стойността на текущата файлова позиция.               |
| SEEK\_END | Стойността на текущата файлова позиция (**fd**) става равна на дължината на файла плюс стойността **POS**, която може да бъде отрицателна, нулева или положителна. **POS** от нула задава изместване в края на файла. |
| SEEK\_SET | Стойността на текущата файлова позиция (**fd**) става равна на стойността **POS**. **POS** от нула задава изместване в началото на файла.                                                                             |

Повече информация: [Sparse Files](https://en.wikipedia.org/wiki/Sparse_file)
