Здравствуйте!!!
Вот пример записи в разделяемую память в Linux'е:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/shm.h>
#define SHMEM_SIZE 4096
#define SH_MESSAGE "Hello World!\n"
/*
*
*/
int main(int argc, char** argv) {
int shm_id;
char * shm_buf;
int shm_size;
struct shmid_ds ds;
shm_id = shmget ( 2011, SHMEM_SIZE, IPC_CREAT | IPC_EXCL | 0600 );
if ( shm_id == -1 ) {
fprintf ( stderr, "shmget() error\n");
return 1;
}
shm_buf = ( char * ) shmat ( shm_id, NULL, 0 );
if ( shm_buf == ( char * ) -1) {
fprintf ( stderr, "shmat() error\n");
return 1;
}
shmctl ( shm_id, IPC_STAT, &ds );
shm_size = ds.shm_segsz;
if ( shm_size < strlen ( SH_MESSAGE ) ){
fprintf ( stderr, "error: segsize = %d\n", shm_size );
return 1;
}
strcpy ( shm_buf, SH_MESSAGE );
printf ( "ID: %d\n ", shm_id );
fgetc ( stdin );
shmdt ( shm_buf );
shmctl( shm_id, IPC_RMID, NULL );
return 0;
}
Вот пример для чтения данных из разделяемой памяти:
#include <stdio.h>
#include <stdlib.h>
#include <sys/shm.h>
#define SH_SIZE 6
/*
*
*/
int main(int argc, char** argv) {
int shm_id;
key_t ipckey;
char * shm_buf;
/*
if ( argc < 2 ){
fprintf ( stderr, " Too few arguments\n");
return 1;
}
*/
shm_id = shmget ( 2011, 1, 0600 );
printf ( " shm_id = %d\n", shm_id );
if ( shm_id == -1 ) {
printf ( "shmget error \n" );
shmctl( shm_id, IPC_RMID, NULL );
return 1;
}
shm_buf = ( char * ) shmat ( shm_id, 0, 0 );
if ( shm_buf == ( char * ) -1 ){
fprintf ( stderr, " shmat() error\n");
return 1;
}
printf (" Message: %s\n", shm_buf );
shmdt ( shm_buf );
return 0;
}
Я не очень силен в С, подскажите как записать/считать в разделяемую память массив структур TrapVarBaseStat[20]:
struct TrapVarBase {
u_char Number; long int IP; u_char Mode; u_char OnOff;
}TrapVarBaseStat[20];
Хорошо было бы чтобы массив структур TrapVarBaseStat[20] хранился именно в разделяемой памяти (этот массив записывается одним процессом а считывается другим).
Помогите пожалуйста.
Спасибо!!!