삽질의 현장/- C

곱씹어보자 C!_#027_삽잡이의 두서없이 막말하는 파일 입출력 (1)

shovelman 2015. 6. 30. 23:28

달려라 달려 삽잡이~

정줄 놓은 삽잡이~



프로그램의 인스턴스를 프로세스라고 합니다.

프로그램은 죽어있는 껍데기라면... 프로세스는 살아있는 실제라고 할까요?

즉, 메모리상에 떠 있는 프로그램을 프로세스라고 부릅니다.

여기에는 치명적인 단점이 있습니다...

바로 전원이 꺼지면 다 날라간다는...


프로세스에는 명령어와 데이터들로 되어있습니다...

프로세스에 기록되어 있는 데이터들은 사용자 실행시간에 만들어지는데...

이게 전부 프로그램에 남아있지는 않습니다. 

원칙적으로 남아있던 데이터들은 남아 있겠지만, 프로그램에는 

명령어와 데이터 셋이 있겠죠...


그렇다면 전원이 없더라도 데이터가 유지되도록 할 수는 없는 것인가요?

아닙니다... 우리는 한글, 워드.. ppt 등등등 밤새 작성하고 저장하지 

날리는 일이 없지는 않지만 아무튼 저장할 수 있지 않습니까...

 

자기방식의 보조 기억장치 하드디스크에 저장하면 전원이 나가도 

데이터들이 유지될 것입니다. 


프로세스의 데이터를 이 곳에 저장하면 되겠군요...

이때 데이터를 저장하면 읽고 쓸 수 있는 단위가 파일로 변합니다.

파일에 데이터가 저장되고, 이 파일을 불러들여와 복원할 수 있으니까 말입니다.


허나... CPU는 보조기억장치가 느려서 같이 안놀아줍니다...

그러니 파일이랑 직접적으로 놀 수가 없습니다... 

뭔말이냐 하면 직접 데이터를 읽고 쓸 수 없다 이겁니다.

그렇다면 어떻게 해야하나요... 

중간의 인터페이스를 거쳐야됩니다... 즉 OS에 요청을 하는 것이죠.


예를들어 밤새 포트폴리오를 작성한 뒤 OS에 요청하는 것이죠...

"야 나 이것좀 파일에 써줘... 저장해야되... 이거 내일 열어야되 알겠지..."


직접 못해요... 알겠죠? 우리는 요청해야되요...


OS와 나 사이에는 그렇다면 파일에 대한 정보를 공유하고자하는 

무언가가 있어야합니다.


그리하여, 파일을 읽고 쓰는 기본적인 3단계를 소개하고자 합니다.


1. 파일 열기 (생성)


C에서는 foepn() 이라는 함수를 사용하게 돕니다. 

fopen() 함수는 

fp = fopen("",""); 

이와 같이 사용되며, 파일 정보 변수(메모리) 주소를 반환합니다...

이 주소를 fp라는 포인터에 담는 것이죠...


2. 파일을 원하는 형태로 Reading / Writing


Read/ Write 함수를 사용하는 것입니다.

위에서 언급한 파일 정보가 들어있는 fp 포인터 변수가 필수로 필요하겠군요...


3. 파일 닫기


fclose() 함수를 통해 파일을 닫습니다...

"이 정보를 가지고 있는 파일을 닫겠어." 이렇게 해석할 수 있겠죠...



OS는 파일의 구조체 내용물을 채웁니다... 이건 OS가 사용하기 위한 정보로써

우리는 이 파일에 대한 정보가 담겨져 있는 객체를 

OS가 메모리에 생성한 뒤 반환하는 메모리의 주소를 받아서 사용하는 것일 뿐입니다.

우리는 OS를 거쳐 파일 입출력을 이룰 수 있다고 했습니다.