bool create (const char *file, unsigned initial_size);
첫번째 인자의 이름 + 두번째 인자의 크기의 새로운 파일을 생성 (파일을 여는 것과 다름 주의) → 생성에 성공하면 true, 실패하면 false 반환.
create이 호출되면 시스템콜 핸들러에 의해 syscall_create 이 실행된다.
bool syscall_create (struct intr_frame *f){
bool success;
check_addr(f->R.rdi);
if(f->R.rdi == NULL){
syscall_abnormal_exit(-1);
}
success = filesys_create(f->R.rdi,f->R.rsi);
f->R.rax = success;
return success;
}
syscall_create은 인자들이 정상적인지 체크한 후 파일을 생성하는 함수를 호출하고 그 성공 여부를 반환한다.
다행히 파일을 생성하는 함수 filesys_create()
는 핀토스에서 기본적으로 제공된다. 이 함수는 인자로 들어온 이름 + 크기의 파일을 생성하여 성공하면 true 실패하면 false를 반환한다. 같은 이름의 파일이 이미 존재하거나 내부적으로 메모리 할당에 실패하면 실패한다. 파일 시스템 내용은 다다음주차에 다루기 때문에 우선 세부적인 함수 구현 내용을 다루는 것은 pass하기로 한다!
성공여부를 %rax 값에 넣는 것은 호출규약 상 시스템 콜이 반환받아야 하는 값은 %rax에 저장해두어야 하기 때문이다!