유닉스 커널 -> 하드웨어 운영 및 관리
1. 파일 관리
2. 프로세스 관리
3. 메모리 관리
4. 통신 관리
5. 주변장치 관리
시스템 호출 : 커널에 서비스 요청을 위한 프로그래밍 인터페이스 -> API

유닉스에서 파일
- 연속된 바이트의 나열
- 특별한 다른 포맷 X
- 디스크 파일뿐 아니라 외부 장치도 특수 파일 형태로 관리
파일을 사용하기 위해 먼저 open() 시스템 호출을 사용
int open(const char* path, int oflag, [mode_t mode]);
-> 파일 열기 성공하면 파일 디스크립터, 실패시 -1 리턴
-> 파일 디스크립터는 열린 파일 번호를 나타냄
oflag
- O_RDONLY 읽기모드(read() 호출 가능)
- O_WRONLY 쓰기모드(write() 호출 가능)
- O_RDWR 읽기/쓰기모드(read(), write() 호출 가능)
- O_APPEND : 데이터를 쓰면 파일 끝에 첨부
- O_CREAT : 해당 파일 없는 경우 생성, mode는 생성할 파일의 사용 권한
- O_EXCL : 해당 파일이 있다면 에러내고 실행X
open하고 쓰고 다 쓴다음 close()하기
파일 생성 : creat()
- path가 나타내는 파일을 생성 및 쓰기 전용으로 연다.
- 생성된 파일의 사용권한은 mode로 정한다.
- 기존 파일이 존재한다면 파일 내용 삭제 후 연다.
- open(path, WRONLY|O_CREAT|O_TRUNC, mode);와 동일
int creat (const char* path, mode_t mode);
파일 닫기 : close()
int close(int fd)
성공 0 실패 -1
read() 시스템 호출
- fd가 나타내는 파일에서 nbytes만큼 데이터 읽어 읽은 데이터를 buf에 저장
ssize_t read(int fd, void *buf, size_t nbytes);
-> 성공(읽은 바이트 수), 파일 끝 만나면(0), 실패(-1)
rw-r--r-- : owner group others
mode 값의 표현
rw- -> 110 -> 6
r-- -> 100 -> 4
r-- -> 100 -> 4
mode -> 0644(앞에 0을 붙여줌)
write() 시스템 호출
ssize_t write (int fd, void *buf, size_t nbytes);
- 파일 쓰기 성공 : 실제 쓰여진 바이트 수, 실패 시 -1 반환
diff file1 file2 -> 파일의 크기의 다른 부분이 있나 확인
-> 아무것도 안나오면 없는것
파일 디스크립터 복제
int dup(int oldfd); -> oldfd에 대한복제본인 새로운 파일 디스크립터를 생성하여 반환, 실패시 -1
int dup2(int oldfd, int newfd); -> oldfd를 newfd에 복제, 복제된 새로운 파일 디스크립터 반환, 실패시 -1
- oldfd와 새로운 디스크립터는 하나의 파일을 공유
파일 위치 포인터
-> 파일 내에 읽거나 쓸 현재 파일내 위치를 가리킴
파일 위치 포인터 이동 : lseek()
off_t lseek(int fd, off_t offset, int whence);
fd : 현재 파일 디스크립터
offset : 기준에서 이동한 크기
whence : 파일 위치 포인터의 기준 (SEEK_SET : 파일 처음, SEEK_CUR : 파일 현 위치, SEEK_END : 파일 마지막)
이동 성공 -> 현재 위치 반환, 실패 -> -1 반환
파일 위치 이동
lseek(fd,0L,SEEK_SET);
레코드 단위
lseek(fd,sizeof(record),SEEK_CUR);
write(fd,&record1,sizeof(record)); 같은 방식으로도 저장 가능
-> 저장 후 다음 record 기록장소로 포인터 자동 이동
'학교수업' 카테고리의 다른 글
인공지능개론 4주차 (0) | 2022.03.30 |
---|---|
게임공학개론 4주차 (0) | 2022.03.28 |
게임공학개론 3주차 (0) | 2022.03.24 |
컴퓨터 그래픽스 기초 3주차 (0) | 2022.03.23 |
인공지능개론 3주차 (0) | 2022.03.21 |