😈
ReverseMe
  • Introduction
  • References
  • ReverseMe
    • Introduction
      • What is Reverse Engineering?
      • Legality of Reverse Engineering
      • Reverse Engineering Communities
  • Programming Language
    • C
      • Basic
        • Pointer
        • Casting
      • Reference
        • stdio.h
          • fclose()
          • fopen()
          • fseek()
          • ftell()
          • fgetc()
          • fgets()
          • fread()
          • fprintf()
          • fwrite()
          • printf()
          • putchar()
          • puts()
          • sprintf()
          • snprintf()
        • stdlib.h
          • malloc()
          • calloc()
          • realloc()
          • free()
          • rand()
          • srand()
        • string.h
          • strcat()
          • strncat()
          • strcmp()
          • strncmp()
          • strcpy()
          • strncpy()
        • time.h
          • time()
  • Reversing Fundamentals
    • Stripped and Unstripped
  • Tools
    • file
    • strings
    • ltrace
    • ghidra
  • CTF Writeups
    • HackTheBox Challenges
      • Baby RE
      • You Cant C Me
  • ABOUT ME
    • Mail
    • LinkedIn
    • GitHub
Powered by GitBook
On this page
  • Sintaks
  • Contoh Penggunaan
  • 1. Membaca data biner dari file
  • 2. Membaca data teks dalam blok
  1. Programming Language
  2. C
  3. Reference
  4. stdio.h

fread()

Membaca data dari file dalam C

Previousfgets()Nextfprintf()

Last updated 2 months ago

Fungsi fread() digunakan untuk membaca blok data dari file ke dalam memori. Fungsi ini terutama berguna untuk membaca data biner, tetapi juga bisa digunakan untuk membaca data teks dalam blok.

Sintaks

size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
  • ptr âžœ Pointer ke area memori tempat data akan disimpan.

  • size âžœ Ukuran setiap elemen yang akan dibaca (dalam byte).

  • count âžœ Jumlah elemen yang akan dibaca.

  • stream âžœ Pointer ke file yang sudah dibuka.

  • Mengembalikan jumlah elemen yang berhasil dibaca. Jika kurang dari count, bisa berarti terjadi EOF atau kesalahan.

Contoh Penggunaan

1. Membaca data biner dari file

Misalkan kita memiliki file biner data.bin yang berisi array integer, dan kita ingin membaca 5 elemen.

#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *file = fopen("data.bin", "rb");  // Buka file dalam mode baca biner

    if (file == NULL) {
        printf("Gagal membuka file!\n");
        return 1;
    }

    int data[5];
    size_t elemenTerbaca = fread(data, sizeof(int), 5, file);

    if (elemenTerbaca != 5) {
        printf("Hanya berhasil membaca %zu elemen.\n", elemenTerbaca);
    } else {
        printf("Berhasil membaca 5 elemen:\n");
        for (int i = 0; i < 5; i++) {
            printf("%d ", data[i]);
        }
        printf("\n");
    }

    fclose(file);
    return 0;
}

Hasilnya:

Berhasil membaca 5 elemen:
10 20 30 40 50
  • fread(data, sizeof(int), 5, file) mencoba membaca 5 elemen, masing-masing sebesar sizeof(int), dari file.

  • Jika jumlah elemen yang berhasil dibaca kurang dari 5, berarti terjadi EOF atau kesalahan baca.

  • Hasil dari fread() kemudian dibandingkan dengan jumlah elemen yang diharapkan untuk memastikan data telah dibaca dengan benar.

2. Membaca data teks dalam blok

Walaupun biasanya untuk data teks kita menggunakan fungsi seperti fgets(), fread() juga bisa digunakan untuk membaca blok data sekaligus.

data.txt
Hello, World!
#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE *file = fopen("data.txt", "r");  // Buka file teks

    if (file == NULL) {
        printf("Gagal membuka file!\n");
        return 1;
    }

    char buffer[50];
    size_t bytesTerbaca = fread(buffer, sizeof(char), sizeof(buffer) - 1, file);
    buffer[bytesTerbaca] = '\0'; // Tambahkan karakter null untuk mengakhiri string

    printf("Data yang dibaca:\n%s\n", buffer);

    fclose(file);
    return 0;
}

Hasilnya:

Data yang dibaca:
Hello, World!
  • fread(buffer, sizeof(char), sizeof(buffer) - 1, file) membaca hingga 49 karakter dari file teks ke dalam buffer.

  • Setelah pembacaan, kita menambahkan karakter null (\0) agar buffer menjadi string yang valid.

  • Ini memungkinkan kita untuk membaca blok teks sekaligus.

20B
data.bin