fwrite  função

Protótipo

size_t fwrite(void * dados, size_t tamanho, size_t numero_itens, FILE * fluxo);

Descrição

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.

Parâmetros

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

Valor de retorno

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.

Exemplo

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.
Veja também

fread função

fputc função