В файл можно записать менее 1 байта - PullRequest
13 голосов
/ 15 июля 2011

Насколько я знаю, самая маленькая единица в C - это byte.Откуда это ограничение?CPU?

Например, как я могу записать nibble или один bit в файл?

Ответы [ 3 ]

19 голосов
/ 15 июля 2011

нет, вы не можете ... файлы организованы в байтах, это самый маленький фрагмент данных, который вы можете сохранить.

И, вообще-то, этот 1 байт будет занимать более 1 байта пространства. В зависимости от ОС, типа системного файла и т. Д. Все, что вы сохраняете как файл, будет использовать как минимум один блок. Размер блока зависит от используемой файловой системы. Затем этот 1-бит будет записан как 1 байт и может занимать до 4 КБ вашего диска.

В википедии вы можете прочитать что-то о том, что байт является наименьшей единицей данных во многих компьютерах.

7 голосов
/ 15 июля 2011

На самом деле, это char - byte не является стандартным типом C.

Ограничение исходит из стандарта C и является тавтологическим: char - наименьший полный тип в C, поскольку он определен как таковой, а размеры всех других типов определены как кратные размеру char ( чей размер всегда 1.)

Теперь число битов в char может варьироваться от платформы к платформе. Количество битов в конечном итоге определяется аппаратно, хотя в настоящее время большинство систем используют 8-битные char с. char должен представлять наименьшую адресуемую единицу памяти (опять же по определению).

4 голосов
/ 15 июля 2011

Более того, данные записываются в файлы в секторах (например, 512 байт или около того).И если нам нужно изменить только один байт, весь сектор читается, исправляется и записывается обратно.

Но вам не нужно думать о секторах.Чтобы изменить один бит, просто найдите подходящую позицию байта в файле, прочитайте этот байт, измените бит и запишите результат обратно.

...