Paano Gamitin ang fread() sa C: Paliwanag sa Mabisang Pagbabasa ng Binary na File

1. Pangkalahatang-ideya ng fread()

fread() ay isang function sa C na ginagamit upang magbasa ng binary na data mula sa isang stream papunta sa isang programa. Karaniwang ginagamit ito upang epektibong i-load ang nilalaman ng file sa isang buffer, kaya’t angkop ito para sa pagbabasa ng malalaking dami ng data o paghawak ng mga binary na file tulad ng mga larawan at audio.

1.1. Pangunahing Paggamit ng fread()

Ang pangunahing syntax ng fread() ay ganito:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
  • ptr : Pointer papunta sa buffer kung saan ilalagay ang nabasang data
  • size : Laki (sa bytes) ng bawat elementong babasahin
  • nmemb : Bilang ng mga elementong babasahin
  • stream : Pointer papunta sa input stream

2. Paano Gumagana ang fread() at ang Halaga ng Pagbabalik Nito

2.1. Paano Gumagana ang fread()

Ang fread() ay nagbabasa ng tinukoy na bilang ng mga byte mula sa ibinigay na stream at inilalagay ito sa buffer na tinuturo ng ptr. Sinusubukang basahin nito ang nmemb na mga elemento, kaya ang kabuuang laki ay size * nmemb na mga byte.

2.2. Halaga ng Pagbabalik ng fread()

Ang fread() ay nagbabalik ng aktwal na bilang ng mga elementong nabasa. Karaniwan, ang halagang ito ay dapat katumbas ng nmemb, ngunit kung naabot na ang dulo ng file (EOF) o may naganap na error, maaaring mas maliit na halaga ang maibabalik.

3. Halimbawa ng Paggamit ng fread()

3.1. Simpleng Halimbawa ng Kodigo

Ang sumusunod na kodigo ay nagpapakita ng isang simpleng halimbawa ng paggamit ng fread() upang magbasa ng data mula sa isang binary na file.

#include <stdio.h>

int main() {
    FILE *file;
    char buffer[10];

    file = fopen("example.bin", "rb");
    if (file == NULL) {
        printf("Unable to open file.n");
        return 1;
    }

    size_t bytesRead = fread(buffer, sizeof(char), 10, file);
    printf("%zu bytes read.n", bytesRead);

    fclose(file);
    return 0;
}

Sa halimbawang ito, binubuksan ang isang binary na file na pinangalanang “example.bin” at binabasa ang 10 byte mula rito. Kung matagumpay ang fread(), ipapakita ang bilang ng mga byte na nabasa.

4. Mga Tip at Babala sa Paggamit ng fread()

4.1. Mag-ingat sa Laki ng Buffer

Kapag gumagamit ng fread(), siguraduhing sapat ang laki ng buffer. Ang pagtukoy ng maling laki ng buffer ay maaaring magdulot ng buffer overflow at hindi inaasahang pag-uugali.

4.2. Pagsusuri para sa EOF at mga Error

Ang fread() ay nagbabalik ng halagang mas mababa sa nmemb kung naabot nito ang EOF o nakaranas ng error. Kaya’t mahalagang laging suriin ang halaga ng pagbabalik upang matukoy kung natapos nang maayos ang operasyon ng pagbasa o kung may naganap na error.

5. Paghahambing sa mga Katulad na Function

5.1. Pagkakaiba ng fread() at fgets()

Ang fread() ay espesyal na dinisenyo para sa pagbabasa ng binary na data, samantalang ang fgets() ay ginagamit para sa pagbabasa ng text na data. Ang fgets() ay nagbabasa hanggang sa isang newline character, kaya mas angkop ito sa paghawak ng mga text file.

5.2. Pagkakaiba ng fread() at fscanf()

Ang fscanf() ay ginagamit para sa pagproseso ng formatted na input, nagbabasa ng data ayon sa tinukoy na format. Sa kabilang banda, ang fread() ay nagbabasa ng binary na data nang direkta at hindi umaasa sa anumang partikular na format.

6. Advanced na Paggamit ng fread()

6.1. Pagbabasa ng mga Estruktura

Ang fread() ay maaari ring gamitin upang direkta nang basahin ang binary na representasyon ng mga komplikadong data type tulad ng mga estruktura. Halimbawa, maaari mong i-save at i-reload ang isang estruktura mula sa isang file gaya ng ipinapakita sa ibaba.

typedef struct {
    int id;
    char name[20];
} Record;

Record record;
fread(&record, sizeof(Record), 1, file);

6.2. Mga Pagsasaalang-alang sa Performance

Dahil ang fread() ay nagbabasa ng malalaking bloke ng data nang epektibo, ito ay mas mabilis kaysa sa mga function tulad ng fgetc() na nagbabasa ng isang byte bawat pagkakataon. Kapag nagtatrabaho sa malalaking file, ang paggamit ng block-based na pagbasa tulad ng fread() ay maaaring magpabuti nang malaki sa performance.

7. Buod

Ang fread() ay isang makapangyarihang function para sa pagbabasa ng binary na data sa C. Sa tamang paggamit nito, maaari mong epektibo at ligtas na i-import ang nilalaman ng mga file sa iyong mga programa. Ang pagmaster sa function na ito ay magbibigay-daan sa iyo upang dalhin ang iyong paghawak ng binary na file sa susunod na antas sa C programming.

年収訴求