본문 바로가기
코스웨어/16년 스마트컨트롤러

20160307_오아람_업무일지_파일입출력

by 알 수 없는 사용자 2016. 3. 8.
728x90
반응형

파일 입출력

 

- 파일열기 -

파일을 액세스하기 위해서는 우선 파일을 열어야한다. 밑은 파일을 열기 위한 함수의 원형이다.

FILE *fopen(const char *filename, const char *mode);

fopen의 첫번째 인자에는 파일이름을 두번째 인자에는 파일의 모드를 넣어준다.

 사용 할 수 있는 파일 모드는 밑의 표와 같다.

모드

의미
r 읽기위해서 텍스트모드로 파일을 연다
w 쓰기위해서 텍스트모드로 파일을 연다
a 텍스트 모드로 기존의 파일에 추가한다.
rb 읽기위해서 2진모드로 파일을 연다.
wb 쓰기위해서 2진모드로 파일을 연다.
ab 2진 모드로 기존의 파일에 추가한다.
r+ 읽기와 쓰기를 위해서 텍스트 모드로 파일을 연다.
w+

읽기와 쓰기를 위해서 텍스트 모드로 파일을 생성한다.

a+

읽기와 추가를 위해서 텍스트 모드로 파일을 연다. 파일이 존재하지 않으면 생성한다

 

 <<예시 소스코드>>

#include<stdio.h>

int main()
{
     FILE *fp;
     char caArray[1000]; 

     fp= fopen("A.txt","r");//fopen(열고싶은파일의 이름,모드)
     fscanf(fp,"%s",caArray);//그냥 scanf에서 파일포인터만 추가해주면 된다.
     printf("%s",caArray);

     fclose(fp);//열어놓은 파일을 닫는다.

     return 0;
}

 

<<결과화면>>

 컴파일러는 함수원형인 "FILE *fopen(const char *filename, const char *mode);"와

"fp= fopen("A.txt","r");"의 갯수을 비교 한 뒤, 인자의 타입비교, 반환값일치 여부를 검사한다.

 

만약 열려고 하는 파일이 없다면 에러를 띄워야 할 것이다.

<<예시소스>>

#include<stdio.h>

int main()
{
        FILE *f;

 f=fopen("c:\\영화\\영구와땡칠이.avi","rb");

 if (f == NULL)
 {
      printf("얼씨구. 파일이 안 보이네요\n");
 }

 else
 {
  fclose(f);
 }

 return 0;

}

<<결과화면>>

* 파일의 이름에서 \\를 두번쓰는 이유 

 \를 하나만 쓰면 개행문자라고 인식할 수 있어 구분하기 위해서 \\를 쓴다.

 

- Hexaview -

<<예제소스>>

#include<stdio.h>

void Hexaview(unsigned char *ucpData,unsigned int uiLen)
{
     unsigned int uiCnt;
     unsigned int ui16Cnt;

     uiCnt=0;
 
 
     printf("========================================\n");
     printf("===============Hexa Viewer==============\n");

 while(160>uiCnt)
 {
     printf("%p ",uiCnt);//헥사의 주소부분
  
     ui16Cnt=0;

            while(16>ui16Cnt)
           {
               printf("%02X ",*ucpData);//헥사값
               ui16Cnt++;
               ucpData++;

           }
          printf("\n");
          uiCnt+=16; 
       }
}

 

int main()
{
     unsigned char ucBuff[]="1234567890ABCDEF";
 
     Hexaview(ucBuff,0); 
 
     return 0;
}

<<결과화면>>

(왼쪽부터)주소||Hexa값||아스키코드

아스키코드 첫번째 값을 매직넘버라고 하는데, 이 값을 통해 이 파일이 무슨 파일인지 알 수 있다.

 

- 용어정리 -

스트림 - 흐름 데이터 세트 간에서 데이터의 전송이 실행되고 있는 것으로, 문자 형식의 데이터 항목이 연속한 열로 되어 있는 것.

내부 버퍼 - 임시 저장 장소(변수는 내부 버퍼이다)


fp(file pointer) - 현재 읽고 있는 파일내의 위치


액세스 - 장치 A에서 장치 B에 대하여 정보를 송출할 때 A는 B에 액세스한다고 한다

드라이브 - 파티션으로 나눈 방들.


디렉토리 - 폴더


상대경로(<->절대경로)  - 드라이브기준으로 움직이는 것(=절대경로C:W)
                                      cd ..으로 움직이는 경로는 다 상대경로


CR - 줄의 제일 앞으로 이동시켜주는것


LF - 줄을 바꿔주는 것(\n)

728x90