Jeśli chcesz podzielić się czymś w rodzaju char **keys
tablicy między fork()
„d procesach używając shm_open
i mmap
mogę tylko trzymać wskaźnik do keys
do segmentu pamięci wspólnej, czy muszę skopiować wszystkie dane w keys
do segmentu pamięci wspólnej?Sharing Wskaźniki między wieloma Rozwidlonych Procesów
Odpowiedz
Wszystkie dane, które chcesz udostępnić, muszą znajdować się we wspólnym segmencie. Oznacza to, że zarówno wskaźniki, jak i łańcuchy muszą znajdować się we wspólnej pamięci.
Udostępnianie czegoś zawierającego wskaźniki może być uciążliwe. Jest tak, ponieważ mmap nie gwarantuje, że dane mapowanie znajdzie się w wymaganym adresie.
Nadal można to zrobić na dwa sposoby. Po pierwsze, możesz spróbować szczęścia z mmap i mieć nadzieję, że linker dynamiczny nie załaduje czegoś pod preferowany adres.
Druga metoda polega na użyciu względnych wskaźników. Wewnątrz wskaźnika zamiast zapisywania wskaźnika na łańcuchu, przechowuje się różnicę między adresem wskaźnika a adresem łańcucha. Tak:
char **keys= mmap(NULL, ...);
char *keydata= (char*) keys + npointers * sizeof(char*);
strcpy(keydata, firstring);
keys[0]= (char*) (keydata - (char*) &keys[0]);
keydata+= strlen(firststring)+1;
Kiedy chcesz uzyskać dostęp ciąg od innego procesu, zrobić odwrotnie:
char **keys= mmap(NULL, ...);
char *str= (char*) (&keys[0]) + (ptrdiff_t) keys[0];
To trochę kłopotliwe, ale działa niezależnie od deklaracji co mmap.
- 1. Python Object Property Sharing
- 2. Lista interfejsów API/procesów z wieloma zadaniami iOS
- 3. Text File Sharing użyciu ACTION_SEND
- 4. C, jak używać semaforów POSIX na rozwidlonych procesach?
- 5. Sortowanie między wieloma kolumnami (Perl)
- 6. Jak zmienić konwencję nazewnictwa relacji między wieloma a wieloma tabelami?
- 7. Delphi XE2 File Sharing i iOS
- 8. Przyrostowe wskaźniki
- 9. Łącze sieciowe między wieloma maszynami VirtualBox
- 10. Konflikt między wieloma bibliotekami "android-support-v4"
- 11. Generowanie liczb losowych między wieloma waha
- 12. Metody zarządzania plików konfiguracyjnych między wieloma środowiskami
- 13. Synchronizacja czasu JS między wieloma urządzeniami
- 14. ios - Nawigacja między wieloma sterownikami NavigationControllers
- 15. Udostępnianie Mongoose instancji między wieloma KMP pakiety
- 16. Jak udostępniać obrazy między wieloma hostami dokerów?
- 17. angularjs: single Wybierz między wieloma wyboru
- 18. Udostępnianie pojedynczej usługi między wieloma aplikacjami angular.js
- 19. jak udostępnić jedną transakcję między wieloma wątkami
- 20. Optymalizacja algorytmu - najkrótsza trasa między wieloma punktami
- 21. Rysuj Trasy między wieloma punktami na mapie
- 22. Ludzki czytelny upływ czasu między wieloma dniami
- 23. Jaka jest różnica między szablonami procesów Agile, Scrum i CMMI
- 24. Wskaźniki do członków reprezentacji dla
- 25. Co to są mocne wskaźniki i słabe wskaźniki
- 26. tablice zero length vs. wskaźniki
- 27. Linux: Jak znaleźć listę procesów demonów i procesów zombie
- 28. C++. metoda klasy Wskaźniki
- 29. Czy istnieją wskaźniki czasowe?
- 30. dereferencing void wskaźniki