Qual é a razão para fread / fwrite tomar tamanho e contar como argumentos?

Tivemos uma discussão aqui no trabalho sobre por que fread e fwrite assumem um tamanho por membro e contam e retornam o número de membros lidos / gravados, em vez de apenas usar um buffer e tamanho. O único uso que poderíamos criar é se você quiser ler / escrever uma série de estruturas que não são igualmente divisíveis pelo alinhamento da plataforma e, portanto, foram preenchidas, mas que não podem ser tão comuns que justifiquem essa escolha em design.

DeFREAD (3):

A função fread () lê nmemb elementos de dados, cada tamanho de bytes, do fluxo apontado por fluxo, armazenando-os no local indicado por ptr.

A função fwrite () grava elementos nmemb de dados, cada um com o tamanho de bytes, no fluxo apontado pelo fluxo, obtendo-os no local indicado por ptr.

fread () e fwrite () retornam o número de itens lidos ou gravados com sucesso (ou seja, não o número de caracteres). Se ocorrer um erro ou o final do arquivo for atingido, o valor de retorno será uma contagem curta de itens (ou zero).

questionAnswers(7)

yourAnswerToTheQuestion