내 프로그램에 명명된 메모리 영역을 많이 만들고 mmap
다른 프로세스가 읽을 수 있도록 어딘가에 배치하고 싶습니다. 한 번에 하나의 프로그램 인스턴스만 실행된다는 보장은 없습니다. 이상적으로는 블록을 아래에 배치하고 싶습니다 /proc/self/<blockname>
. 가능합니까? 아니면 매핑 파일을 넣을 다른 곳이 있나요? (내 프로그램은 일반적으로 루트로 실행되지 않습니다.)
나는 (내가 아는 한) 이름을 지정할 수 없으므로 /proc/self/fd
or 를 사용하고 싶지 않습니다 ./proc/self/map_files
답변1
/proc
아니요, 구조는 생성되기 때문에 의미 있는 방식으로 추가할 수 없습니다 ("실제" 파일 시스템이 아님). /sys
이는 일부 컴퓨터에서도 마찬가지입니다. 변경된 구조는 /proc
단순하지 않습니다(예제 참조)/proc 아래에 폴더를 만들고 해당 폴더 아래에 항목을 만듭니다.).
추가 자료:
- Linux 파일 시스템 계층: 1장. Linux 파일 시스템 계층: 1.14. /프로세스
- mmap, munmap - 파일이나 장치를 메모리에 매핑하거나 매핑 해제합니다.
- /proc/sys에 디렉터리와 파일을 만드는 것이 가능합니까?
@mark-plotnick은 POSIX 공유 메모리 사용을 제안했습니다.이름.
추가 자료:
- Posix 공유 메모리 및 매핑된 파일(예: mmap과 비교)
- shm_overview - POSIX 공유 메모리 개요
- shm_open, shm_unlink - POSIX 공유 메모리 객체 생성/열기 또는 링크 해제
(이것들은 모두명명 된물체작업은
shm_open()
다음과 유사합니다.open(2)
. 이름은 생성되거나 열릴 공유 메모리 객체를 지정합니다. 이식 가능한 사용을 용이하게 하려면 공유 메모리 개체는 다음 형식의 이름으로 식별되어야 합니다./somename
NAME_MAX
;즉, 초기 슬래시와 그 뒤에 슬래시가 아닌 하나 이상의 문자가 포함된 최대(즉, 255)개의 문자로 구성된 null 종료 문자열입니다 . - shm_open - 공유 메모리 객체 열기(실시간)(POSIX)
답변2
아니요. 커널은 프로세스가 아니라 그 안에 무엇이 있는지 결정합니다. (그것이 당신이 묻는 질문이 아닙니다. 다른 프로세스는 에서 당신의 프로세스를 볼 수 없습니다.)/proc/PID
/proc/PID
/proc/self
/proc/self
프로세스가 자신에 대한 데이터를 전송해야 하는 경우 이 정보를 저장하는 일반적인 위치 /var/run
는 관리자가 시작한 프로세스(예: 시스템 서비스)의 경우 아래이거나 /tmp
사용자가 시작한 프로세스의 경우 사용자의 홈 디렉터리입니다. 홈 디렉토리는 컴퓨터 간에 공유될 수 있으므로 일반적으로 프로세스 관련 정보를 저장하는 데는 적합하지 않습니다. 최신 Linux 시스템에도 있습니다. 하나를 선택하고 디렉토리 또는 1234가 PID인 것과 같은 규칙을 정의하십시오. 프로세스가 종료되면 디렉터리가 삭제됩니다./run/user/UID
/tmp/myapplication-1234
/run/user/myapplication/1234