Entra

View Full Version : Leggere e scrivere su memoria condivisa


Ashitaka
20-07-2005, 17:47
Salve!

Sto scrivendo un programmino in c sotto linux e ho bisogno di utilizzare la memoria condivisa.

Dopo che ho creato la memoria condivisa con l'istruzione shmget e dopo che l'ho "attaccata" allo spazio di indirizzamento del processo interessato, come faccio a scrivere e leggere dalla stessa ???

Quali istruzioni devo usare ???
Ad esempio come scrivo sulla memoria condivisa una variabile di tipo carattere o un struttura ?

Ho visto che per scrivere le stringhe si può usare strcpy(indirizzo memoria, stringa), per il resto cosa uso? :muro:

cionci
20-07-2005, 18:27
http://www.ecst.csuchico.edu/~beej/guide/ipc/shmem.html

maxithron
20-07-2005, 18:43
su che versione del kernel stai provando questi esercizi?

beppegrillo
20-07-2005, 18:59
su che versione del kernel stai provando questi esercizi?
ci sono differenze?

maxithron
20-07-2005, 19:02
ci sono differenze?

possibili bug su IPC_PRIVATE

Ashitaka
20-07-2005, 19:11
Allora, il kernel è questo 2.6.3-7mdk.

Ho visto il link, ma non ho capito come posso fare per assegnare il valore letto dalla memoria condivisa ad un'altra variabile.

Vorrei scrivere qualche dato sulla memoria condivisa da un dato processo, leggerlo da un'altro e assegnarlo ad una variabile, è possibile farlo ?

cionci
20-07-2005, 19:18
Certo...ora io non sono a conoscenza dei bug di cui parla maxithron, ma se per una stringa hai già visto come si fa, per un intero si fa in questo modo:

data è il puntatore che punta all'inzio dell'area di memoria condivisa...

Ora vuoi scrivere due interi nella memoria condivisa:

int *uno = (int *)data;
int *due = (int *)data + sizeof(int); /*lascio lo spazio per il primo intero*/

maxithron
20-07-2005, 19:32
dalle man pages di shmget:

"BUGS

Use of IPC_PRIVATE don't inhibits to other processes the
access to the allocated shared memory segment.

As for the files, there is currently no intrinsic way for
a process to ensure exclusive access to a shared memory
segment. Asserting both IPC_CREAT and IPC_EXCL in shmflg
only ensures (on success) that a new shared memory segment
will be created, it doesn't imply exclusive access to the
segment.


"

ilsensine
21-07-2005, 08:44
dalle man pages di shmget:

"BUGS

Use of IPC_PRIVATE don't inhibits to other processes the
access to the allocated shared memory segment.

Fatico a trovare un utilizzo pratico per un segmento di memoria condivisa, però NON condivisibile con altri processi... ;)
Le manpage più recenti infatti hanno sostituito quella frase con questa:

BUGS
The name choice IPC_PRIVATE was perhaps unfortunate, IPC_NEW would more
clearly show its function.

ilsensine
21-07-2005, 08:49
int *uno = (int *)data;
int *due = (int *)data + sizeof(int);/
int *due = (int *)data + 1;
:ahahah:

maxithron
21-07-2005, 09:52
Fatico a trovare un utilizzo pratico per un segmento di memoria condivisa, però NON condivisibile con altri processi... ;)
Le manpage più recenti infatti hanno sostituito quella frase con questa:

già, almeno almeno sul 2.6.12(che è l'unico che ho sottomano attualmente.

ilsensine
21-07-2005, 10:17
già, almeno almeno sul 2.6.12(che è l'unico che ho sottomano attualmente.
la manpage non è distribuita con il kernel. Il 2.6.12 dovrebbe comportarsi come tutti i predecessori, e credo che resterà così in eterno.

Ashitaka
21-07-2005, 16:11
Ok, grazie a tutti delle info! :)