Linux는 파일 오프셋을 어떻게 관리합니까?

Linux는 파일 오프셋을 어떻게 관리합니까?

이 기사를 읽은 후:https://stackoverflow.com/questions/14189944/unix-system-file-tables, 나는 Linux가 파일을 관리하는 방법에 대해 기본적으로 이해하고 있습니다.

하지만 파일의 오프셋을 관리하는 방법을 모르겠습니다.

내가 이해한 바로는 열린 파일 테이블의 요소(행)는 자체 오프셋을 유지합니다. 예를 들어, 두 개의 프로세스 A와 B가 있고 동일한 파일을 읽고 있습니다. 그래서 나는 이 사건이 다음과 같아야 한다고 생각합니다.

                      Open File Table
____________            ______________
| processA |            | offset: 12 | ------\
|   fdA    | ---------> |------------|        \         INode Table
|----------|                                   \______  ___________
                                               /        |  file   |
____________            ______________        /         |---------|
| processB |            | offset: 15 | ------/
|   fdB    | ---------> |------------|
|----------|

따라서 프로세스 A에는 열린 파일 테이블에 자체 오프셋이 있고 프로세스 B에도 자체 오프셋이 있습니다. 위의 경우 프로세스 A는 오프셋 12에서 파일을 읽고 프로세스 B는 오프셋 15에서 파일을 읽고 있습니다.

내가 옳다면 지금은 혼란스러워요.

이제 이라는 파일을 여는 프로세스가 있으면 myfile지속적으로 파일에 문자열을 씁니다. 어느 시점에서 나는 > myfile파일을 비우는 명령을 실행합니다 . 내가 이해한 바에 따르면 프로세스에는 자체 오프셋이 있고 프로세스 > myfile에는 또 다른 오프셋이 있습니다. > myfile자체 오프셋만 변경되는데, 이제 쓰기 프로세스가 실행 후 파일 시작 부분에 문자열 쓰기를 시작하는 이유는 무엇입니까(오프셋은 이제 0임) > myfile?

요약하면, 쓰기 프로세스는 실행 후 오프셋이 변경되어야 한다는 것을 어떻게 알 수 있습니까 > myfile? 어떤 종류의 오프셋 동기화 메커니즘이 있습니까?

답변1

요약하면, 쓰기 프로세스는 실행 후 오프셋이 변경되어야 한다는 것을 어떻게 알 수 있습니까 > myfile?

그러나 실제로는 그렇지 않습니다. 파일 오프셋으로 인해 변경되지 않습니다 > myfile.

후속 파일 작업에서 발생하는 상황은 상황에 따라 다릅니다.read오프셋이 파일 끝을 벗어나면 0이 반환됩니다.writeO_APPEND;로 파일을 열면 파일 오프셋이 파일 끝으로 조정됩니다. 그렇지 않으면 파일에 누락된 데이터가 추가되더라도 요청된 오프셋에서 쓰기가 발생합니다.

관련 정보