인자 배치
파일 디스크립터, 사용자 버퍼 주소, 바이트 수를 ABI가 정한 레지스터에 둔다.
시스템 콜은 함수 호출처럼 보이지만, CPU 권한 모드 전환과 커널의 파일 객체 검사를 반드시 거친다.
파일 디스크립터, 사용자 버퍼 주소, 바이트 수를 ABI가 정한 레지스터에 둔다.
syscall 명령으로 사용자 모드에서 커널 모드로 들어가며 커널 진입점이 실행된다.
현재 프로세스의 파일 디스크립터 테이블에서 open file description을 찾는다.
VFS가 ext4, pipe, socket처럼 실제 객체 종류에 맞는 read 연산으로 보낸다.
커널이 copy_to_user()로 데이터를 넘기고 읽은 바이트 수나 errno를 사용자 코드에 돌려준다.
커널은 전달받은 주소가 접근 가능한 사용자 공간인지 확인하고, 잘못된 주소에는 EFAULT를 반환한다.
printf()는 버퍼링을 할 수 있지만, 실제 파일이나 터미널 접근은 결국 write() 같은 시스템 콜로 내려간다.