티스토리 뷰
[System Programming]#3 File I/O - Read/Write Pointer
DevOpser 2017. 9. 30. 22:44# 3.2 Read/Write Pointer
읽기/쓰기 포인터(Read/Write Pointer)는 개방된 파일 내에서 읽기 작업이나 쓰기 작업을 수행할 바이트 단위의 위치를 가리키는 것으로 특정 위치를 기준으로 한, 상대적인 위치를 의미하는 오프셋(offset) 이다. 프로그램이 파일을 개방한 직후의 읽기/쓰기 포인터는 파일의 첫 부분을 기준으로 0이라는 값을 가지게 된다.
즉, 파일 내용의 첫 번째 바이트를 가리키게 된다. 이후에 read와 같은 함수로 파일의 내용을 읽으면 그 크기만큼 읽기/쓰기 포인터의 위치가 증가하게 되며 파일의 내용을 모두 읽게 되면 파일의 마지막을 의미하는 EOF(end-of-file)을 가리키게 되고 더 이상 읽을 파일의 내용이 없음을 알게 된다. 읽기/쓰기 포인터는 파일 기술자마다 하나씩 존재하며 시스템에 의해 관리된다.
서로 다른 프로그램이 동일한 파일을 동일한 설정으로 개방했다 해도 파일 기술자가 다르기 때문에 읽기/쓰기 포인터 역시 개별적으로 관리된다. 즉 하나의 프로그램이 읽기/쓰기 작업을 수행하여 포인터의 위치가 변경되더라도 다른 프로그램의 읽기/쓰기 포인터에는 전혀 영향을 주지 않는다.
시스템 호출 open을 사용하여 파일을 개방한 직후에 읽기/쓰기 포인터는 파일 내용의 첫 번째 바이트를 가리키므로 0이라는 값을 가지게 된다. 파일의 첫 번째 바이트를 기준으로 0만큼 떨어진 위치를 가리키고 있다는 의미이다. 이후에 read로 파일 내용을 읽을 수 있다.
정상적으로 파일의 내용을 읽게 되면 read는 성공적으로 읽어 들인 파일 내용의 바이트 크기를 반환하게 된다. 파일 내용의 마지막까지 읽게 되면 읽기/쓰기 포인터의 위치는 파일의 끝인 EOF를 가리키게 되고 이 때 포인터의 값은 파일 내용의 바이트의 크기와 같아진다. 읽기/쓰기 포인터가 EOF를 가리킬 때 다시 read를 호출하게되면 더 이상 정상적으로 읽어 들일 수 있는 파일의 내용이 없기 때문에 read는 0을 반환하게 되고 프로그램은 파일의 끝에 도달하여 더 이상 읽기 작업을 수행하지 않아도 된다.
파일의 읽기 또는 쓰기 작업이 끝나면 close를 사용하여 개방된 파일을 닫는다. close를 호출할 때 파일이 개방된 상태인 파일 기술자(fd)를 지정하여 반환하는 것이다.
// 파일을 읽기 전용 상태로 개방 fd = open(afile, O_RDONLY); . . . // 파일을 닫는다. close(fd); |
'프로그래밍 > System Programming' 카테고리의 다른 글
[System Programming]#3 File I/O - close() (0) | 2017.10.01 |
---|---|
[System Programming]#3 File I/O - open() (0) | 2017.09.30 |
[System Programming]#3 File I/O - File Descriptor (0) | 2017.09.30 |
[System Programming]#2 File - File System Structure (0) | 2017.09.30 |
[System Programming]#2 File - File System 소개 (0) | 2017.09.30 |
- Total
- Today
- Yesterday
- 보드고글
- 아디다스
- iptime ssh
- 처음처럼
- 아디다스아이웨어
- 백클랜드
- iptime telnet
- 비발디파크
- 라프
- 고글
- iptime putty
- 아디다스스노우고글체험단
- 블루미러렌즈
- IPTIME NAS
- ADIDASEYEWEAR
- LIKEAFIRST
- 아디다스고글
- 스키장고글
- 스키웨어
- 모집단
- nas2dual
- ADIASEYEWEAR
- BACKLAND
- 아디다스백클랜드
- 스키고글
- 아디다스스노우고글
- 스노우고글
- 보드웨어
- 아이다스아이웨어
- 출시
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |