Linux. Komunikacja międzyprocesowa przez pamięć dzieloną System V
Ostatnio zmodyfikowano 2016-11-28 18:47
BloodyNomad Temat założony przez niniejszego użytkownika |
Linux. Komunikacja międzyprocesowa przez pamięć dzieloną System V » 2016-11-28 15:36:51 Mam problem z dodaniem opcji żeby moje komunikaty zapisywały się w tablicy w segmencie pamięci dzielonej w taki sposób: - zapisz k "komunikat" - zapisz komunikat w wierszu k tablicy stringów w pamięci dzielonej, - odczytaj k - odczytaj komunikat z wiersza k tablicy w pamięci dzielonej. Póki co mogę zapisać i odczytać komunikat ale bez stosowania tablicy. #include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <stdlib.h>
#define SEGSIZE 100
main( int argc, char * argv[] ) { int shmid, cntr; char * segptr; if( argc == 1 ) usage(); key_t key; key = ftok( ".", 'S' ); if(( shmid = shmget( key, SEGSIZE, IPC_CREAT | IPC_EXCL | 0666 ) ) == - 1 ) { printf( "Segment pamięci dzielonej istnieje - otwieram jako klient\n" ); if(( shmid = shmget( key, SEGSIZE, 0 ) ) == - 1 ) { perror( "shmget" ); exit( 1 ); } } else { printf( "Tworzenie nowego segmentu pamięci dzielonej\n" ); } if(( segptr = shmat( shmid, 0, 0 ) ) == - 1 ) { perror( "shmat" ); exit( 1 ); } switch( tolower( argv[ 1 ][ 0 ] ) ) { case 'z': writeshm( shmid, segptr, argv[ 2 ] ); break; case 'o': readshm( shmid, segptr ); break; default: usage(); } }
writeshm( int shmid, char * segptr, char * text ) { strcpy( segptr, text ); printf( "Zrobiono...\n" ); }
readshm( int shmid, char * segptr ) { printf( "segptr: %s\n", segptr ); }
usage() { fprintf( stderr, "Program do komunikacji z międzyprocesowej\n" ); fprintf( stderr, "\nPOSTAĆ WYWOŁANIA: <nazwa programu> (z)apisz <text>\n" ); fprintf( stderr, " (o)dczytaj\n" ); exit( 1 ); } |
|
j23 |
» 2016-11-28 18:47:01 Po co tworzysz ten sam temat? -> http://cpp0x.pl/forum/temat/?id=24024 |
|
« 1 » |