Linux가 경로별 mmap을 지원하지 않는 이유는 무엇입니까?

Linux가 경로별 mmap을 지원하지 않는 이유는 무엇입니까?

시스템 mmap호출에는 매개변수로 fd가 필요하지만 fd를 닫을 때 mmap은 여전히 ​​프로세스의 메모리 주소 공간에 존재합니다.

따라서 mmap을 유지하는 데는 열린 fd가 필요하지 않습니다. 그렇다면 Linux는 왜 fd를 사용하여 파일을 생성하는 mmap만 지원하고 파일 이름 경로는 지원하지 않습니까? and와 같은 시스템 호출을 할 수 있다면 정말 좋지 않을까요 mmapat?openatexecveat

mmap파일에 대한 추가 참조가 생성 되면 mmapat프로세스의 fd를 가져오지 않고 처음에 해당 참조를 자동으로 생성한 다음 나중에 해제할 수 없는 이유는 무엇입니까?

Linux 커널에서 그러한 시스템 호출을 하지 않는 데 대한 역사적 또는 보안상의 이유가 있습니까?

답변1

mmap(2)은 기본적으로 커널 버퍼를 읽은 다음 제공된 버퍼에 복사하는 대신 커널이 직접 쓸 버퍼에 대한 읽기(2)입니다.

readat(2)가 없는 것과 같은 이유로 mmapat(2)도 없습니다.

파일 설명자는 더 이상 필요하지 않습니다.

mmap() 함수는 파일 설명자 fildes와 연관된 파일에 추가 참조를 추가합니다. 이는 해당 파일 설명자에 대한 후속 close()에 의해 제거되지 않습니다. 파일에 대한 매핑이 더 이상 없으면 참조가 삭제됩니다.

이것은 매오픈그룹 홈페이지. 내 기억이 맞다면 그들은 POSIX 표준을 관리하는 사람들이므로 알고 있어야 합니다.

관련 정보