size_t fwrite(void * dados, size_t tamanho, size_t numero_itens, FILE * fluxo);
fwrite tenta escrever para o fluxo numero_itens elementos, com tamanho bytes cada. Em caso de sucesso, ou seja, todos os elementos tenham sido escritos com sucesso, fwrite escreveu (tamanho * numero_itens) bytes do parâmetro dados para o fluxo.
fwrite funciona como se fputc fosse chamada tamanho vezes para cada objeto. Note que fwrite apenas funciona como chamadas sucessivas a fputc. Na realidade, fwrite não faz uso da função fputc.
O ponteiro interno de posição do fluxo é avançado pelo número de bytes escritos com sucesso.
A marca temporal de última modificação do arquivo é atualizada.
dados - Ponteiro para onde os dados a serem armazenados. Deve possuir um tamanho, em bytes, de ao menos (tamanho * numero_itens)
tamanho - Tamanho de um único elemento
numero_itens - Número de elementos, cada um com um tamanho de tamanho bytes
fluxo - Fluxo a ser escrito
Retorna o número de objetos escritos com sucesso. Pode ser menor do que numero_itens caso um erro aconteça. Nesse caso, o indicador de erro do fluxo é setado e pode ser acessado com ferror.
Caso tamanho ou numero_itens seja zero, fwrite retorna zero e não faz nada.
Escrevendo a cadeia de caracteres "http://www.cmaismais.com.br - A melhor referência em português de C.\n" em um arquivo binário:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE* arquivo = fopen("arquivo_binario.bin", "wb");
if(arquivo == NULL) {
fprintf(stderr, "Erro ao tentar abrir arquivo_binario.bin.\n");
return 1;
}
/* Prepara os dados */
char dados[] = "http://www.cmaismais.com.br - A melhor referência em português de C.\n";
int tamanho = sizeof(dados);
/* Escreve os dados */
size_t elementos_escritos = fwrite(dados, 1, tamanho, arquivo);
if(elementos_escritos != tamanho) {
fprintf(stderr, "Erro ao tentar escrever no arquivo.\n");
return 2;
}
/* Fecha o arquivo */
fclose(arquivo);
return 0;
}
Note que, se fwrite fosse chamada como fwrite(dados, tamanho, 1, arquivo) ao invés de fwrite(dados, 1, tamanho, arquivo), escritas parciais não seriam possíveis. Com tamanho elementos de 1 byte só, escritas parciais, em caso de erro, são possíveis. Com 1 elemento de tamanho bytes, escritas parciais não são possíveis. Em caso de erro, nada seria escrito com sucesso.
Resultado - utilizando a ferramenta cat do Unix para ler o conteúdo do arquivo:
cmaismais $ cat arquivo_binario.bin
http://www.cmaismais.com.br - A melhor referência em português de C.
fread função
fputc função