#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);
함수도 존재한다 .
'Soft Ware > C 언어!!' 카테고리의 다른 글
자료 구조 리스트 , 저수준 파일 입출력 을 이용한 프로그램 !!! (0) | 2012.02.06 |
---|---|
구조체 배열을 이용하여 파일에 쓰기 !!! (0) | 2012.01.31 |
구조체 를 파일에 입력 및 출력 하기 (0) | 2012.01.31 |
ftell 함수 와 rewind 함수 (0) | 2012.01.30 |
fseek 사용하기 ^^ (0) | 2012.01.30 |