유닉스 커널 -> 하드웨어 운영 및 관리

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

+ Recent posts