C & LINUX

C / LINUX fread(3), fwrite(3)

Ocean_ 2022. 5. 2. 12:17

함수 기능

fread

사이즈 크기를 갖는 데이터를 한 단위로하여 nobj인자만큼 읽도록 하는 함수

fwrite

size크기만큼의 데이터를 nobj 인자만큼 출력

함수 원형

#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nobj, FILE *fp);
size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *fp);

함수 파라메터

ptr

읽고 쓸 데이터 위치

size

크기

nobj

얼마만큼 읽을 것인가

fp

파일포인터

함수 예제

fread

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

struct ssu_pirate {
    unsigned long booty;
    unsigned int beard_length;
    char name[128]
};

int main(void){
    struct ssu_pirate blackbeard ={950, 48, "Edward Teach"},pirate;
    char *fname = "ssu_data";
    FILE *fp1, *fp2;

    if((fp2=fopen(fname,"w"))==NULL){
        fprintf(stderr, "fopen error for %s\n",fname);
        exit(1);
    }

    if(fwrite(&blackbeard, sizeof(struct ssu_pirate),1,fp2)!=1){
        fprintf(stderr, "fwrite error\n");
        exit(1);
    }

    if(fclose(fp2)){
        fprintf(stderr, "fclose error\n");
        exit(1);
    }

    if((fp1 = fopen(fname,"r"))==NULL){
        fprintf(stderr, "fopen error\n");
        exit(1);
    }

    if(fread(&pirate,sizeof(struct ssu_pirate),1,fp1)!=1){
        fprintf(stderr, "fread error\n");
        exit(1);
    }

    if(fclose(fp1)){
        fprintf(stderr, "fclose error\n");
        exit(1);
    }

    printf("name=\"%s\" booty=%lu beard_length=%u\n",pirate.name,pirate.booty,pirate.beard_length);
    exit(0);
}

fwrite

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

struct ssu_id {
    char name[64];
    int id;
};

int main(void){
    struct ssu_id test1, test2;
    char *fname = "ssu_exam.dat";
    FILE *fp;

    if ((fp=fopen(fname,"w"))==NULL){
        fprintf(stderr, "fopen error for %s\n",fname);
        exit(1);
    }

    printf("Input ID>> ");
    scanf("%d", &test1.id);
    printf("Input name>> ");
    scanf("%s",test1.name);

    if(fwrite(&test1, sizeof(struct ssu_id), 1,fp)!=1){
        fprintf(stderr, "fwrite error\n");
        exit(1);
    }
    fclose(fp);

    if((fp=fopen(fname,"r"))==NULL){
        fprintf(stderr, "fopen error for %s\n",fname);
        exit(1);
    }

    if(fread(&test2, sizeof(struct ssu_id),1,fp)!=1){
        fprintf(stderr,"fread error\n");
        exit(1);
    }
    printf("\nID    name\n");
    printf(" ============\n");
    printf("%d      %s\n", test2.id, test2.name);
    fclose(fp);
    exit(0);
}

함수 결과

fread

fwrite

리눅스시스템 프로그래밍 - 홍지만 저

교재 내에 있는 예제를 바탕으로 작성한 글 입니다.