chapter02 파일 입출력(01,02)
파일?
-관련 있는 데이터의 집합이며 하드디스크와 같은 물리적 저장 장치에 저장됨
-일반 파일: 텍스트 바이너리 형태의 데이터를 저장하는 파일
-특수 파일: 데이터 전송, 장치 접근에 사용하는 파일
저수준 파일 입출력
-커널의 시스템 호출을 사용한다.
-파일에 좀 더 빨리 접근 가능.
-바이트 단위로 파일을 다루어서 특수파일도 read,write 가능->함수 자체 구조는 대부분 단순
-파일 기술자 사용(file descripter, 정수형이며 파일을 구분하기 위해 번호를 붙힘. )
고수준 파일 입출력
-데이터를 버퍼단위로 read,write
-다양한 입출력 데이터 변환기능
-파일 포인터 사용
저수준 파일 입출력
파일 기술자
-저수준 파일 입출력에서 열린 파일 참조하는데 사용
-파일 구분하기 위해 번호를 붙힘
-0은 표준입력(보통 파일 기술자는 키보드)
-1은 표준출력(보통 파일 기술자는 모니터 화면)
-2는 표준오류출력(보통 파일 기술자는 모니터 화면)
-open함수가 파일 열기 성공시에 파일 기술자가 리턴됨
파일을 read,write하기 위해서는 파일은 open하고 완료후에 close를 해야한다.
주요 파일 상태 플래그(oflag)
- O_RDONLY 읽기전용 열기
- O_WRONLY 쓰기전용 열기
- O_RDWR 읽기쓰기 전용 열기
- O_CREAT 파일 생성, 이미 존재시 의미 없다.
- O_EXCL 파일 생성, 이미 존재시 오류 메시지 출력
- O_APPEND 파일의 맨 끝에 내용 추가
- O_TRUNC 쓰기옵션으로 열었을때 내용을 모두 없애고 파일 길이를 0으로 변경
설정 가능 모드 종류
-S_IRWXU : 소유자 읽기/쓰기/실행 권한
-S_IRWXG : 그룹 읽기/쓰기/실행 권한
-S_IRWXO : 기타 사용자 읽기/쓰기/실행 권한






파일을 읽을때는 read함수, 쓸때는 write함수 사용

파일 오프셋 지정
오프셋
-파일의 내용을 읽거나 쓰면 현재 읽을 위치 혹은 쓸 위치를 알려주는 것
-파일 시작지점부터 현재 위치까지의 바이트 수이다.
-한 파일에서 오프셋은 오직 하나(read/write모드로 열었을때 각각 오프셋이 따로 있지 않다는 것)
lseek함수
-오프셋의 위치를 바꾸거나 확인할때 사용
-off_t lseek(int fildes 파일 기술자 , off_t offset 이동할 오프셋 위치 , int whence 오프셋의 기준 위치 ) 음수 사용 가능
- SEEK_SET: 파일의 시작 기준
- SEEK_CUR: 현재 위치 기준
- SEEK_END: 파일의 끝 기준

파일 기술자 복사
-파일을 열면 파일 기술자가 할당되는데 이때 dup함수 혹은 dup2함수를 사용하여 이 파일 기술자를 복사하는게 가능하다.
-int dup(int fildes 파일 기술자); -->기존 파일 기술자를 인자로 받아서 새로운 파일 기술자를 리턴하며 이때 가장 작은 값으로 할당됨


파일을 삭제하려면 unlink 함수를 사용
int unlink(const char *path 삭제할 파일의 경로) -->path에 지정한 파일의 inode에서 링크수를 감소시키며 이것이 0이 되면 지정한 파일이 삭제된다. 비슷한 함수로 int remove(const char *path)가 있다.
