File Sharing
int fd1 = open("a.txt", O_RDONLY);
int fd2 = open("a.txt", O_RDONLY);
위 코드처럼 하나의 파일을 두 번 연속 열게 되면 file offset은 어떻게 될까?
파일을 열게 되면 디스크(저장장치)에서 파일의 메타데이터를 불러와서 V-node Table에서 관리한다고 했었다.
다시 한번 열게 되더라도 메모리 상에는 이미 파일의 메타데이터가 올라와있기 때문에 그 데이터를 그대로 사용한다.
따라서 V-node Table에 파일의 메타데이터는 한 번만 올라오게 된다.
이후 Open File Entry가 생성되는데 이것은 파일을 열 때마다 생성되기 때문에 파일을 두 번 열었을 경우 Open File Entry는 두 개 생성된다.
이 두 개의 Open File Entry는 같은 파일의 데이터를 사용하기 때문에 동일한 V-node Entry를 가리키고 있다.
또한 두 개의 Open File Entry는 각각 하나씩 File Descriptor를 갖고 있다.
이 두 개의 File Descriptor는 Descriptor Table에서 관리된다.
File offset은 Open File Entry에 속해있고 Open File Table에서 관리된다.
파일의 작업 중인 위치는 파일이 작업 중이어야만 쓸모가 있다.
따라서 파일이 열렸을 때 그 정보를 다루는 Open File Table에서 관리되는 것이다.
따라서 하나의 파일이더라도 여러 번 open하게 되면 각각의 File offset을 갖게 되는 것이다.
우리가 동일한 텍스트 파일을 두 번 열었을 때 하나의 창에서 커서의 위치를 옮긴다고 다른 창에서 커서가 움직이지 않는 것과 같은 원리다.
한 줄 요약
- 파일을 여러 번 오픈해도 파일 오프셋은 각각 따로 생성되기 때문에 작업 공간을 공유하지 않는다.
'C언어 > 시스템 소프트웨어' 카테고리의 다른 글
[시스템 소프트웨어/C언어] stat(), fstat() (0) | 2024.10.08 |
---|---|
[시스템 소프트웨어/C언어] lseek, 파일 오프셋 변경 (파일 작업 위치 변경) (0) | 2024.10.08 |
[C언어] perror, errno, exit (0) | 2024.10.07 |
[C언어] 파일 입출력 (open, close, write, read) (0) | 2024.10.07 |
[시스템 소프트웨어] 메타 데이터, inode, 파일 디스크립터 (0) | 2024.10.07 |