본문 바로가기
42seoul/circle-1

[ GNL ] 04. 선행지식_read() 함수

by saniii 2021. 11. 3.

# read()

ssize_t read (int fd, void *buf, size_t len)
read() 시스템 콜은 파일의 끝(EOF)를 알려주기 위해 0을 반환합니다. 파일에 읽은 바이트가 더 이상 없을 경우에 해당하며 에러로 처리되지는 않습니다. 다만, 파일을 읽을 데이터가 더 이상 없을 뿐임을 알려주는 것

 

 

# 시스템 콜

+ 운영체제는 커널 모드(Kernel Mode)와 사용자 모드(User Mode)로 나뉘어 구동

+ 운영체제에서 프로그램이 구동되는데 있어 파일을 읽어 오거나, 파일을 쓰거나, 혹은 화면에 메시지를 출력하는 등 많은 부분이 커널 모드를 사용한다. 시스템 콜은 이러한 커널 영역의 기능을 사용자 모드가 사용 가능하게, 즉 프로세스가 하드웨어에 직접 접근해서 필요한 기능을 사용할 수 있게 해준다. 

+ read()는 시스템콜의 여러 종류 중 파일 조작(file manipulation)에 해당한다. 

 

 

3. Buffersize의 최대 크기? 왜 1000000000가 넘어가면 터질까?

buffersize가 커지면 Segmentation fault (core dumped)가 뜬다.

-> 지역 변수는 stack 영역에 저장되는데, 보통 스택 사이즈가 윈도는 1메가, 리눅스는 8메가로 설정되어있다. 만약에char buf[BUFFER_SIZE + 1];라고 선언하고 여기에 스택 사이즈보다 큰 수를 받으면 스택 오버플로우가 생길 수 있다



출처: https://minsoftk.tistory.com/47 [Minsoftk]

댓글