티스토리 뷰

# 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); 


댓글