메모리 파일에 대해 fsync()를 호출합니다.

메모리 파일에 대해 fsync()를 호출합니다.

fsync(2)에서:

fsync() transfers ("flushes") all modified in-core data of (i.e., modified
buffer cache pages for) the file referred to by the file descriptor fd to
the disk  device  (or  other permanent  storage  device)

fsync는 어떤 영향을 미치나요?FD인메모리 API 중 하나를 통해 얻습니다.shm_open(3p)아니면 `memfd_create(2)*? 메모리 개체에 대한 변경 사항을 명시적으로 커밋해야 합니까?

답변1

효과가 없습니다. 영구 저장과는 아무런 관련이 없습니다.


역사적으로 mmap()과 read()/write()를 혼합하면 일관되지 않은 결과가 발생할 수 있습니다.

최신 Linux는 지원되는 모든 CPU에서 제대로 작동하도록 세심하게 구성되어 있습니다. 시스템이 너무 모호하더라도 하드웨어 관련 버그를 발견하는 것은 여전히 ​​운이 좋지 않을 수 있습니다.

핵심은 POSIX 호환 운영 체제에서는 다음을 사용해야 할 수도 있다는 것입니다.동기화()나중에 read()가 일관되게 작동하도록 하려면 파일의 메모리 맵에 변경 사항을 쓴 후 플러시하십시오. POSIX 규칙을 이해하려면 msync()의 MS_INVALIDATE 플래그와 해당 플래그의 존재 의미를 살펴보는 것이 도움이 될 수 있습니다 :).

그러나 POSIX msync()는 영구 저장소와 관련된 매핑에만 적용됩니다. "공유 메모리 개체"에 미치는 영향은 정의되지 않았습니다. 따라서 이것은 원래 질문에 대답하는 매우 모호한 방법이 될 것입니다.

또한 POSIX와 동일한 이름을 가진 시스템 호출을 구현한다고 해서 반드시 POSIX와 동일한 보장을 제공하는 것은 아니라는 점을 기억하십시오. POSIX 테스트 스위트에는 실제로 소수의 운영 체제 버전만 제출되었습니다. (돈이 든다).

관련 정보