Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Memoria compartida

Estas en el tema de Memoria compartida en el foro de C/C++ en Foros del Web. Un saludo a todos! TEngo un proble con este programa ----------------------------------------------------------- #include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/ipc.h> #include<sys/shm.h> #define segsize 100 int main( int argc, char *argv[] ...
  #1 (permalink)  
Antiguo 12/10/2008, 22:01
 
Fecha de Ingreso: noviembre-2007
Mensajes: 4
Antigüedad: 16 años, 5 meses
Puntos: 0
Memoria compartida

Un saludo a todos!
TEngo un proble con este programa
-----------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>


#define segsize 100

int main( int argc, char *argv[] ){
key_t key;
int shmid, cntr;
int *segptr;
int num;

if(argc ==1)
usage();

/*Obtener clave IPC*/
key = ftok(".",'S');

/*Abrir (crear si es necesario) el segmento de memoria compartida*/
if(( shmid = shmget( key, segsize, IPC_CREAT | IPC_EXCL | 0666 )) == -1 ){
printf( "El segmento existe - abriendo como cliente\n" );

/*El segmento existe - abrir como cliente*/
if(( shmid = shmget( key, segsize, 0)) == -1 ){
perror( "Error en shmget" );
exit(1);
}
}
else {
printf( "Creando nuevo segmento\n");
}

/*Ligar el proceso actual al segmento*/
segptr = (int *)shmat( shmid, 0, 0);

switch( tolower(argv[1][0])){

case 'e' : num = atoi(argv[2]);
writeshm( shmid, &segptr, num );
break;
case 'l' : readshm( shmid, &segptr );
break;
case 'b' : removeshm( shmid );
break;
case 'm' : changemode( shmid, argv[2] );
break;
default: usage();
}
}

writeshm( int shmid, int *segptr, int text ){
*segptr = 123;
printf( "Hecho...\n" );
}
readshm( int shmid, int *segptr ){
printf( "Valor de segptr: %d\n", *segptr );
}
removeshm( int shmid ){
shmctl(shmid, IPC_RMID, 0 );
printf( "Segmento marcado para borrado\n" );
}
changemode( int shmid, char *mode ){
struct shmid_ds myshmds;

/* Obtener valor actual de la estructura de datos internos*/
shmctl( shmid, IPC_STAT, &myshmds);

/* Mostrar antiguos permisos*/
printf( "Antiguos permisos: %o\n", myshmds.shm_perm.mode);

/* Convertir y cargar el modo*/
sscanf( mode, "%o", &myshmds.shm_perm.mode);

/* Actualizar el modo*/
shmctl( shmid, IPC_SET, &myshmds);

printf( "Nuevos permisos : %o\n", myshmds.shm_perm.mode);
}
usage(){
fprintf( stderr, "shmtool - Utilidad para usar memoria compartida\n");
fprintf( stderr, "\nUSAGE: shmtool (e)scribir <enteros>\n");
fprintf( stderr, " (l)eer\n");
fprintf( stderr, " (b)orrar\n");
fprintf( stderr, " (m)odo <modo en octal>\n");
exit(1);
}
-------------------------------------------------------
Este programa esta echo en linux
Es un ejemplo para uso de memoria compartida en este caso estoy compartiendo enteros y todo al parecer esta bien, en la funcion "writeshm" escribo a la memoria y en la funcion "readshm" leo lo k esta en la memoria compartidad,
Algun ejemplo para correr el programa es este:
shmtool e 123
shmtool l
shmtool b
shmtool m 660

El problema k tengo sk cuando kiero k imprima el contenido con la orden "shmtool l" me imprime un numero k no es el k le estoy dando a en la orden anterior.
Haber si me pueden ayudar a solucionar este problema.

De antemano le doy las gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:58.