Protože diskový soubor je sekvence bloků pevné délky. Potřeba smazat soubor by jen zřídkakdy vycházela tak, aby to padlo na hranici bloků. Tudíž by to nebyla efektivnější operace, než to udělat z user programu pomocí zkopírování soubory za mazaným oknem.
Pokud je třeba častěji mazat uprostřed souboru, dělá se to tak, že soubor se myšlení rozdělí do sekvence kratších binárních kousků, tzv. chunků. Ty se uloží do jednoho souboru, nebo každý zvlášť do zvláštního souboru. A na začátku, nebo uvnitř chunku je mapa, jak za sebou pokračují. Smazání chunku uprostřed souboru je pak triviální operace, jednouše změna jednoho pointeru (32, nebo 64 offsetu) v mapě jako ukazatele na další chunk v pořadí.
Operační systém obvykle neimplementuje věci, které se stejně efektivně dají udělat z user space. Stejně jako linux kernel neimplementuje třeba Newton-Rapsonovu metodu pro hledání kořenů rovnic.
Operační systémy zkrátka implementují takovou množinu operací se soubory, které dovolí efektivní práci z programu.
Funkci nazvanou třeba:
int ferase(int handle, off_t start, off_t size)
si můžete velmi snadno naprogramovat sám a používat.
Kromě toho operace smazání části souboru uprostřed se používá minimálně. Při návrhu struktur a algoritmů programu se lidé snaží takové operaci maximálně vyhnout, protože je velmi neefektivní a nedá se udělat rozumně zaručeně atomicky.
Miloslav Ponkrác
Tomáš je autorem několika více či méně známých projektů jak z oblasti operačních systémů, tak internetu. V současnosti samozvaný expert na Linux, Bash, PHP a MySQL.
Přečteno 26 217×
Přečteno 24 107×
Přečteno 19 594×
Přečteno 18 372×
Přečteno 12 972×