Online Documentation Server
 ПОИСК
ods.com.ua Web
 КАТЕГОРИИ
Home
Programming
Net technology
Unixes
Security
RFC, HOWTO
Web technology
Data bases
Other docs

 


 ПОДПИСКА

 О КОПИРАЙТАХ
Вся предоставленная на этом сервере информация собрана нами из разных источников. Если Вам кажется, что публикация каких-то документов нарушает чьи-либо авторские права, сообщите нам об этом.




next up previous contents
Next: 7 Sound Programming Up: shmtool: An interactive shared Previous: Examples

The Source


#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

#define SEGSIZE 100

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

if(argc == 1)
usage();

/* Create unique key via call to ftok() */
key = ftok(".", 'S');

/* Open the shared memory segment - create if necessary */
if((shmid = shmget(key, SEGSIZE, IPC_CREAT|IPC_EXCL|0666)) == -1)
{
printf("Shared memory segment exists - opening as client\n");

/* Segment probably already exists - try as a client */
if((shmid = shmget(key, SEGSIZE, 0)) == -1) 
{
perror("shmget");
exit(1);
}
}
else
{
printf("Creating new shared memory segment\n");
}

/* Attach (map) the shared memory segment into the current process */
if((segptr = shmat(shmid, 0, 0)) == -1)
{
perror("shmat");
exit(1);
}

switch(tolower(argv[1][0]))
{
case 'w': writeshm(shmid, segptr, argv[2]);
  break;
case 'r': readshm(shmid, segptr);
  break;
case 'd': removeshm(shmid);
  break;
case 'm': changemode(shmid, argv[2]);
  break;
 default: usage();

}
}

writeshm(int shmid, char *segptr, char *text)
{
strcpy(segptr, text);
printf("Done...\n");
}

readshm(int shmid, char *segptr)
{
printf("segptr: %s\n", segptr);
}

removeshm(int shmid)
{
shmctl(shmid, IPC_RMID, 0);
printf("Shared memory segment marked for deletion\n");
}

changemode(int shmid, char *mode) 
{
struct shmid_ds myshmds;

/* Get current values for internal data structure */
shmctl(shmid, IPC_STAT, &myshmds);

/* Display old permissions */
printf("Old permissions were: %o\n", myshmds.shm_perm.mode);

/* Convert and load the mode */ 
sscanf(mode, "%o", &myshmds.shm_perm.mode);

/* Update the mode */
shmctl(shmid, IPC_SET, &myshmds);

printf("New permissions are : %o\n", myshmds.shm_perm.mode);
}

usage()
{
fprintf(stderr, "shmtool - A utility for tinkering
with shared memory\n");
fprintf(stderr, "\nUSAGE:  shmtool (w)rite <text>\n");
fprintf(stderr, "(r)ead\n");
fprintf(stderr, "(d)elete\n");
fprintf(stderr, "(m)ode change <octal mode>\n");
exit(1);
}



Converted on:
Fri Mar 29 14:43:04 EST 1996


With any suggestions or questions please feel free to contact us