Se voglio condividere qualcosa come un char **keys
matrice tra fork()
'd processi utilizzando shm_open
e mmap
posso solo bastone un puntatore a keys
in un segmento di memoria condivisa o devo copiare tutti i dati in keys
nel segmento di memoria condivisa?condivisione puntatori tra più processi a forcella
risposta
Tutti i dati che si desidera condividere devono essere nel segmento condiviso. Ciò significa che sia i puntatori che le stringhe devono essere nella memoria condivisa.
Condividere qualcosa che include i puntatori può essere ingombrante. Questo perché mmap non garantisce che una determinata mappatura finirà nell'indirizzo richiesto.
È ancora possibile farlo in due modi. Innanzitutto, puoi provare la tua fortuna con mmap e sperare che il linker dinamico non carichi qualcosa al tuo indirizzo preferito.
Il secondo metodo consiste nell'utilizzare i puntatori relativi. All'interno di un puntatore, invece di memorizzare un puntatore su una stringa, si memorizza la differenza tra l'indirizzo del puntatore e l'indirizzo della stringa. In questo modo:
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;
Quando si desidera accedere alla stringa da l'altro processo, si fa il contrario:
char **keys= mmap(NULL, ...);
char *str= (char*) (&keys[0]) + (ptrdiff_t) keys[0];
E 'un po' ingombrante ma funziona indipendentemente da ciò che i rendimenti mmap.
- 1. Condivisione di una coda di risultati tra più processi
- 2. C++ condivisione di oggetti di classe singola tra più processi
- 3. Condivisione di una variabile tra processi
- 4. node.js - condivisione di socket tra processi
- 5. Condivisione di un oggetto complesso tra processi Python?
- 6. Condivisione variabile tramite processi ruby
- 7. Otto/EventBus tra più processi
- 8. Condivisione della memoria tra due processi (C, Windows)
- 9. Python condivisione di un dizionario tra processi paralleli
- 10. Condivisione di porte Mach con processi figlio
- 11. Creare processi MPI al volo con la forcella?
- 12. Condivisione di variabili SESSIONE tra più sottodomini
- 13. Condivisione di cookie tra più WKWebViews
- 14. Condivisione di oggetti su processi Java
- 15. Implementazione forcella
- 16. Qual è il metodo più semplice di comunicazione tra processi tra 2 processi C#?
- 17. Variabile condivisa tra i processi Ruby
- 18. Condivisione di oggetti di grandi dimensioni tra diversi processi in Python 3.4
- 19. Può usare il tubo senza forcella?
- 20. Bomba a forcella in serie?
- 21. Condivisione di una risorsa (file) tra diversi processi Python usando HDFS
- 22. modo intuitivo per visualizzare forcella più attivo
- 23. Forcella multipla() Concorrenza
- 24. Come migliorare la condivisione della memoria tra i processi unicorno con Ruby 2.0 su Linux
- 25. Condivisione di scene tra più file storyboard. iPhone vs iPad
- 26. SQLite3 e più processi
- 27. Condivisione di metodi tra più controller C# MVC4
- 28. KyotoCabinet e più processi?
- 29. Dati principali - condivisione di NSManagedObjects tra più thread
- 30. Condivisione di un'istanza Mongoose tra più NPM confeziona