Как може да бъде размерът на файла?
Ние всички понякога се сблъскваме с „ситуация“ на нашите компютри, което ни оставя напълно объркани, като например файл с размер нула, но как е възможно това? Днешната публикация за въпроси и отговори SuperUser има отговори на объркан въпрос на читателя.
Днешната сесия за въпроси и отговори идва при нас с любезното съдействие на SuperUser - подразделение на Stack Exchange, групирано от общността уеб сайтове за въпроси и отговори.
Въпроса
Четецът на SuperUser Eugene S иска да знае как размерът на файла може да бъде нулев:
Това е нещо, с което се сблъсках и не можех да мисля за подходящо обяснение. Ако създам празно * .txt файл на компютъра ми и след това погледнете размера му, той показва размер нула. Как е възможно това? Искам да кажа, дори ако самият файл е празен, той все още трябва да има някакъв размер (дори и ако е само за да запази собственото си име). Как това може да бъде обяснено?
Как е възможно файлът да има размер нула?
Отговорът
Участниците в SuperUser Дейвид Шварц и Корт Амон имат отговор за нас. Първо, Дейвид Шварц:
Възможно е, защото наистина няма файл. Има само запис в указател с име и собственик. Записът в директорията е логически различен от файла. Например, един и същи файл може да има повече от едно име в повече от една директория.
За съжаление, терминът файл не винаги се използва, за да означава точно едно и също нещо. Но логиката на размера на файла идва от модела, в който запис на директория прикачва файл към директория, след което имената на файловете и свързаните мета данни се съхраняват в директорията..
Следван от отговора от Cort Ammon:
Семантичното значение на размера на файла е различно от това, което използвате.
Има много размери на файлове, които имат смисъл. Най-често срещаният и този, който виждате тук, е броят на байтовете във файла. Ако файлът е празен текстов файл, той наистина може да съдържа нула байтове. Този номер е важен за програмистите, защото често се налага да отваряте файл, да четете всички данни и да го затваряте. Трябва да знаем колко байта данни ще бъдат във файла, за да можем да планираме предварително.
Друго значение произтича от начина, по който повечето файлови системи съхраняват данни. Повечето файлови системи съхраняват данни в блокове. Например, файловата система може да съхранява данни в блокове от 64 kB, което означава, че никога няма да разпределя нищо, което не е дори множествено от 64 kB. Това звучи неефективно, но може да направи счетоводството доста по-опростено и често по-просто означава по-бързо.
Трето значение, с което дърпате, би било действителният брой битове, необходими на твърдия диск, за да опише наличието на файл. Това включва информация, която обикновено се съхранява отделно от файла. Например, в Linux концепцията за името на файла се съхранява в inode за директорията, съдържаща файла. [Въз основа на данни от други коментари, това (технически) се съхранява в данните на директорията. Когато го написах, си мислех за случая с малкия справочник. Данните, по-малки от 156 байта, могат да се съхраняват директно в inode.] Това не е често използвано значение, защото е ужасно трудно да се определи, без да се знае изключително дълбокото вътрешно функциониране на вашата файлова система (като например отчитане на необходимото място за съхранение на всички разрешения за файла). Все пак, ако имате твърд диск с 1 000 000 байта и искате да знаете колко голям файл може да се побере на този твърд диск, това ще бъде много важно за вас!
Имате ли какво да добавите към обяснението? Звучи в коментарите. Искате ли да прочетете повече отговори от други технологични потребители на Stack Exchange? Вижте пълната тема за дискусия тук.