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.