본문 바로가기

Daily Report

110630 고수준 fprintf() fwrite() 차이

고수준 함수

에서 기본적인 프로그램을 작성하면

FILE

61

 

 

program을 작성하면

             char ch;

             fscanf([  ],%c,&ch);  -  ch  = 0x61

             fprintf([  ],%c,ch);

 

61

61

 

[고수준함수] fpintf() fwrite()의 차이

1)fprintf()

program

FILE *fp;

int iRet;

int iNum = 0x12345678;

fp = fopen(a.txt,w);

iRet = fprintf(fp, %d, iNum);

printf(%d\n,iRet);

flcose(fp);

 

프로그램을 실행해보면

iRet값으로 9가 나오는 것을 확인 할 수 있습니다

12345678이라면

78 56 34 12로 저장이된다면 4가 나와야 하지만 9가 나왔습니다

 

그래서 이 실행 파일을 hexaview로 실행하여 보겠습니다

 


305419896은 hex 12345678과 같습니다  33 ascii 3 // 30 0입니다

즉 한바이트 ascii로 저장된것을 확인 할 수 있습니다

 

fprintf에서 한계는 최적화에 있어서 파일을 ascii형태로 1바이트당 저장을 하기 때문에 메모리의 낭비를 불러오게 됩니다

 

장점은 화면의 뿌려진 디스플레이 기반의 ascii를 하나씩 저장할수있습니다

 

그럼 반면에


2)fwrite()

program

FILE *fp;

int iRet;

int iNum = 0x12345678;

fp = fopen(a.txt,w);

iRet = fwrite(&iNum, 1,4,fp);

printf(%d\n,iRet);

flcose(fp);

 

위와 마찬가지로 hexaview로 돌려보았더니

1바이트에 2개씩 정수값이 들어가 있는 것을 확일 할 수 있습니다

 


최적화된 형태라고 볼수 있습니다

하지만 그렇다고 fwrite가 더 많이 쓰이고 fprint를 더 적게 쓰는 의미가 아니라 두함수는 각각의 장점이 단점이되고 단점이 곧 장점이 되는 함수입니다 적절하게 사용하면 될듯합니다