В) Блок I / O
инт фрида (void * p, int size,
инт fwrite (void * p, int size,
В блоковите входно/изходни функции броят на байтовете се определя по малко сложен начин: въвежда се терминът "блок". Това е напълно конвенционална единица, което означава всеки определен брой байтове. Програмистът трябва да посочи както "размер на блока", така и "брой блокове"; действителният брой байтове ще бъде техният продукт. Този формат е удобен при четене/запис на масив като цяло.
Резултатът от тези функции е броят на успешно прочетените/написаните блокове. Тя е равна на n или по-малко (ако е невъзможно да се прочетат/запишат n блока). Неравенството на резултата спрямо стойността на n е знак или за неуспех, или за достигане до края на файла.
Например, ако масив от цели числа се съхранява във файл и размерът му е неизвестен (известно е само, че не надвишава 10000), тогава целият масив и дължината му могат да бъдат прочетени с една команда:
n = fread (a, sizeof (int), 10000, f);
Тук се опитваме да прочетем 10 000 "блока" в масив, където всеки блок е един int; всъщност ще бъдат прочетени толкова числа, колкото са във файла, и този номер е присвоен на n.
Коментирайте. Функциите на блок I/O са трудни за прилагане към променлива тип Струна, от по тип Струна (вижте темата "Струни") текстът се съхранява отделно от самата променлива, която е само указател към този текст. Ако трябва да изпълните блок I/O на структура, съдържаща текст, препоръчително е да декларирате текстовите й полета не като Струна, но като масив char.