2017년 9월 25일 월요일

fopen()을 써서 랜덤하게 데이터를 fwrite하기

fopen()을 써서 랜덤하게 데이터를 fwrite할때 주의 사항
처음 열때는 "wb+"로 열고, 그다음부터는 "rb+" 로 열어야 한다.
"ab+"로 열면 무조건 파일 끝에만 write가 된다. (fseek이 제대로 동작 하지 않는다)
이미 있는 파일에 "wb+"로 열어버리면 파일 내용이 지워져 버린다.
파일 내용을 편집, 추가 할때는 "rb+"로 해야 한다.

예제)
#include
#include
#include

int main(int argc, char *argv[]) {
        char *filename = "test.bin";
        FILE *fp = NULL;
        int array[]= {9,3,1,2,5,0,6,8,7,4};
        int len = sizeof(array)/sizeof(int);

        for(int i=0; i                if(i==0)
                        fp = fopen(filename, "wb+");
                else
                        fp = fopen(filename, "rb+");

                int offset = array[i];
                unsigned char data = array[i] & 0x0ff;
                int datalen = 1;

                fseek(fp, offset, SEEK_SET);
                fwrite(&data, datalen, 1, fp);

                fseek(fp, 0, SEEK_END);
                fclose(fp);
        }
        return 0;
}