저는 리눅스에서 코딩 중이며 다른 프로그램을 실행하여 어떤 작업을하려고합니다.C에서 execve 함수에 mmap을 전달하는 방법은 무엇입니까?
마스터는 일부 입력 파일 (슬레이브 당 1 파일)에서 일부 단어 검색을 수행하려면 슬레이브를 실행해야합니다. 모든 검색이 끝나면 마스터는 종속 프로세스에서 찾은 일치 행을 출력 파일에 씁니다. 공유 메모리를 사용하여 마스터와 슬레이브 간의 통신을 시도하고 있습니다.
마스터의 메인에있는 내 포인터를 다른 프로그램에 전달하고 거기에 가져와야하지만 그 유형이 일치하지 않기 때문에 연결할 수 없습니다.
동기화를 위해 세마포어를 사용하는 경우 공유 세마포의 mmap도 전달해야합니다. 노예를 실행하려면 발신자 main
의 코드 스 니펫이 아래에 있습니다. 나는 노예의 주요의 변수는 argv를 사용하여 newArgv에 도달 할 수 있습니다 : 당신은 execve
-ed 실행에 mmap
를 전달할 수 없습니다
int f = open(argv[1], O_RDWR);
unsigned int *addr = mmap(0, 10000, PROT_READ | PROT_WRITE, MAP_SHARED, f, 0);
char * newArgv[10];
for (int a = 0; a < numberOfFiles; a++) {
newArgv[0] = wordToSearch;
newArgv[1] = argv[3 + a];
char * path = "./psearch2aslave";
execve(path, newArgv, NULL);
}
포인터를 전달하지 마십시오 ... 어쨌든 동일한 포인터가 아닙니다. 적절한 OS 책을 읽고 IPC 장을 읽으면 익명의 mmap이 어떤 프로세스 사이의 IPC도 지원하지 않는다고 말해야합니다. 실제 파일을 mmap하고, 파일 이름을 전달하려고합니다. – HuStmpHrrr
이름을 전달하면 mmap을 사용할 필요가 없습니다. 이것은 익명의 mmap이 아니며 ** 공유 메모리 **라는 이름입니다. –
이름을 전달하는 것을 보지 못합니다. 너는 null을, 그러므로 익명으로 전달하고있다. – HuStmpHrrr