Soft Ware/C 언어!!

저수준 파일 입출력 사용하기 !!!

달려가보자 2012. 1. 31. 14:39

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <io.h>

struct Data{
int nData;
char buf[100];
double Height;
};
void main()

{

     int file=0,file1 = 0;
  struct Data a,b;

  memset(&a,0,sizeof(struct Data));
  memset(&b,0,sizeof(struct Data));

  a.nData = 10;
  strcpy(a.buf,"송은남");
  a.Height = (double)175.5;
   printf("%d , %s , %lf \n",a.nData,a.buf,a.Height);

  file=_open("Test.txt",_O_BINARY|O_RDWR|_O_CREAT,_S_IWRITE);
  printf("%d\n",file);
     if (file != -1) {

   printf("파일 오픈\n");
          _write(file,&a,sizeof(struct Data));
   _close(file);
   file1=_open("Test.txt",_O_BINARY|O_RDWR);
   read(file1,&b,sizeof(struct Data));

  
    printf("%d , %s , %lf \n",b.nData,b.buf,b.Height);
         _close(file1);

     }

}

이 소스를 분석하기 전에 저수준과 고수준 의 차이점에 대해서 알아 보겠습니다 !!!

우선 고수준 파일 입출력은 스트림을 이용하여 파일에 입력및 출력하는 방법이고

저수준 파일 입출력은 핸들을 이용하여 그 파일에 직접 접근하여 데이터를 쓰기 및 입력하는 방법이다.

속도 면에서는 저수준 파일 입출력이 빠르지만 비 효율적이라고 하네요 ^^

 int open(const char *pathname, int flags, mode_t mode) 저수준 오픈 함수로서

매개변수는 파일 이름 , 플래그 , 모드 인데 모드는 _O_CREATE 플래그 일때 사용하는것이다 .

● flags

flags

의미

O_APPEND

0x0001

쓰기용으로 파일을 열어, 파일의 끝을 현재위치로 설정한다.

O_CREAT

0x0002

쓰기용으로 파일을 생성한다. 파일이 이미 존재하면 효과가 없다.

O_EXCEL

0x0004

O_CREAT와 함께 사용되어 파일이 이미 존재할 경우 오류값을 반환

O_RDONLY

0x0100

읽기 전용으로 파일을 연다.

O_RDWR

0x0200

읽고 쓰기용으로 파일을 연다.

O_TRUNC

0x0400

파일을 열고 내용을 삭제하여 파일의 길이를 0으로 만든다.

O_WRONLY

0x0800

쓰기전용으로 파일을 연다.

O_BINARY

0x4000

이진 모드로 파일을 연다. (리눅스는 항상 바이너리모드이다.)

O_TEXT

0x8000

텍스트 모드로 파일을 연다.


모드 종류에는

pmode 의미
S_IWRITE 0x00400 사용자 쓰기 허용
S_IREAD 0x00200 사용자 읽기 허용
S_IEXEC 0x00100 사용자 실행 허용

가 있습니다 .

Write 함수 나 read함수나 오픈된 파일 핸들 값을 가지고 파일 입출력을 한다 .

int _read(int fd, void *buffer, unsigned int count);

int _write(int fd, const void *buffer, unsigned int count);

또한

long _lseek(int fd, long offset, int origin);

long _tell(int fd);

함수도 존재한다 .