YS's develop story

시스템콜, 파일접근 프리미티브open(), write(), read(), lseek() 함수 본문

Linux/시스템소프트웨어

시스템콜, 파일접근 프리미티브open(), write(), read(), lseek() 함수

Yusang 2020. 9. 13. 00:28

시스템 콜이란?

응용 프로그램은 하드웨어에 직접 접근할 수 없는데,

응용 프로그램이 하드웨어 접근할 수 있도록 커널이 응용프로그램에게 제공하는 함수.

 

커널이 무엇이냐고요?

 

간단히 설명하면 운영체제 내부에 있는 아주 중요한 프로그램을 '커널'이라고 합니다

 

사전에 명시되어 있는 자세한 의미는..

 

컴퓨터 과학에서 커널은 컴퓨터의 운영 체제의 핵심이 되는 컴퓨터 프로그램의 하나로,

시스템의 모든 것을 완전히 통제한다.

운영 체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러 가지 서비스를 제공한다. 

 

 

시스템 콜 중에서 파일을 만들고 수정하고 읽는 '파일 접근 프리미티브'라고 불리는 

open(), write(); read().. 함수들이 존재합니다.

 

 

이렇게 open함수를 사용하면 "newFile.txt"라는 파일을 소스파일이 존재하는 디렉토리의 생성되게 됩니다.

 

 그리고 write 함수를 이용하면 "newFile.txt"에 내용을 입력할 수 있죠.

 

그리고 read함수를 이용하여 "newFile.txt"에 저장되어 있는 내용을 읽고자 했는데...

보는 것과 같이 "newFile.txt"에 있는 내용이 읽히지 않습니다..

그래서 왜 읽히지 않을까? 고민하게 되었는데 그 이유는..

 

"newFile.txt" 파일의 offset이 write() 함수로 작성한 마지막 바이트로 이동하기 때문입니다.

그렇기 때문에 read함수로 "newFile.txt"을 읽으려면 offset을 변경시키는 함수 lseek()를 사용하거나

 

 

close() 함수를 이용해 파일을 닫고, 다시 연다면 파일의 offset이 0이기 때문에

처음부터 읽을 수 있을 수 있다는 것입니다.!

 

Comments