int read (int fd, void *buffer, unsigned size);
fd로 열린 파일에서size바이트를buffer로 읽습니다. 실제로 읽은 바이트 수를 반환하거나 (파일 끝에서는 0), 파일을 읽을 수 없는 경우 (파일 끝 이외의 조건으로 인해) -1을 반환합니다.fd0은input_getc()를 사용하여 키보드에서 읽습니다.
해당 파일 안에는 다음과 같은 함수 정의가 있습니다 :
/* Reading and writing. */
off_t file_read (struct file *, void *, off_t);
off_t file_read_at (struct file *, void *, off_t size, off_t start);
off_t file_write (struct file *, const void *, off_t);
off_t file_write_at (struct file *, const void *, off_t size, off_t start);
int write (int fd, const void *buffer, unsigned size);
buffer에서 열린 파일fd로size바이트를 씁니다. 실제로 쓰인 바이트 수를 반환하며, 일부 바이트를 쓸 수 없는 경우size보다 작을 수 있습니다. 파일 끝을 지나서 쓰는 것은 일반적으로 파일을 확장하지만, 기본 파일 시스템에서는 파일 성장이 구현되지 않습니다. 예상되는 동작은 파일 끝까지 가능한 한 많은 바이트를 쓰고 실제로 쓰인 바이트 수를 반환하거나, 바이트를 전혀 쓸 수 없으면 0을 반환하는 것입니다.fd1은 콘솔에 씁니다. 콘솔에 쓰는 코드는putbuf()에 대한 한 번의 호출에서 전체buffer를 써야 합니다. 적어도size가 수백 바이트보다 크지 않은 한은요. (더 큰 버퍼를 분할하는 것은 합리적입니다.) 그렇지 않으면 다른 프로세스에서 출력된 텍스트 줄이 콘솔에서 뒤섞여 인간 독자와 우리의 채점 스크립트를 모두 혼란스럽게 할 수 있습니다.