나는 이것이 나와 함께 클릭하지 않는 주제에 대한 숙제이므로 더 많은 설명에 초점을 맞추면 크게 감사 할 것입니다.내 공유 메모리의 이름을 파이프에 쓸 수 없다.
공유 메모리의 이름을 지정하면 다른 여러 프로세스에 액세스 할 수 있도록 공유 메모리를 만들려고합니다. 내 다른 프로세스는 파이프를 통해 부모 프로세스에 연결되며, 공유 메모리가 작성된 후 파이프에 공유 메모리의 이름을 쓰려고합니다. 지금까지 제 코드가 있습니다. 나는 print 서술서를 만들 수 없다.
쓰기를 주석 처리하면 프로그램이 한 번 작동합니다. 그러나 프로그램을 다시 실행하려고하면 내 이름 공간의 이름을 변경해야 작동 할 수 있습니다. 나는 그것이 왜 일어나고 있는지 이해하지 못한다. 내가 이해하지 못하는 기능 중 하나의 속성이있을 것이라고 확신합니다. 당신의 write()
호출에
int shm;
char *p;
shm = shm_open("Name", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
size_t len = 4 * 255;
if (ftruncate(shm, len) == -1) {
perror("Truncate");
return 1;
}
p = mmap(0, 4, PROT_WRITE, MAP_SHARED, shm, 0);
if (p == MAP_FAILED){
perror("mmap");
return 1;
}
write(fd[1], "Name", 30);
printf("Initiator: Shared memory for Consonanats is %d.\n", shm);
열린 자원은 모두 끝나면 닫아야합니다. 공유 메모리를 shm_close해야한다. 그러면 프로그램을 다시 실행할 때마다 네임 스페이스를 변경해야 할 필요가 없어 질 것입니다. – Hypino
공유 메모리 세그먼트의 이름은 슬래시 ('/')로 시작해야합니다. –
@Hypino, "shm_unlink"의 철자가 틀린 것 같습니다. shm_close()는 shm_open()에 대한 표준 카운터가 아닙니다. –