# 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]
'42seoul > circle-1' 카테고리의 다른 글
[ ft_printf ] 1. printf (0) | 2021.12.29 |
---|---|
[ printf ] 0. 문제 이해하기 (0) | 2021.12.23 |
[ GNL ] 03. 선행지식_정적변수(Static) (0) | 2021.11.03 |
[ GNL ] 02. 선행지식_파일 디스크립터 (0) | 2021.10.31 |
[ GNL ] 01. 과제 이해하기 (0) | 2021.10.31 |
댓글