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: 6.4.4 Shared Memory Up: 6.4.3 Semaphores Previous: The Source

semstat: A semtool companion program

As an added bonus, the source code to a companion program called semstat is provided next. The semstat program displays the values of each of the semaphores in the set created by semtool.


/*********************************************
 Excerpt from "Linux Programmer's Guide - Chapter 6"
 (C)opyright 1994-1995, Scott Burkett
 ********************************************* 
 MODULE: semstat.c
 *********************************************
A companion command line tool for the semtool package.
semstat displays
the current value of all semaphores in the set created by semtool.
 *********************************************/

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>

int get_sem_count(int sid);
void show_sem_usage(int sid);
int get_sem_count(int sid);
void dispval(int sid);

int main(int argc, char *argv[])
{
key_t key;
int   semset_id;

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

/* Open the semaphore set - do not create! */
if((semset_id = semget(key, 1, 0666)) == -1) 
{
printf("Semaphore set does not exist\n");
exit(1);
}

show_sem_usage(semset_id); 
return(0);
}

void show_sem_usage(int sid)
{
int cntr=0, maxsems, semval;

maxsems = get_sem_count(sid);

while(cntr < maxsems) {
semval = semctl(sid, cntr, GETVAL, 0);
printf("Semaphore #%d: --> %d\n", cntr, semval);
cntr++;
}
}

int get_sem_count(int sid)
{
int rc;
struct semid_ds mysemds;
union semun semopts;

/* Get current values for internal data structure */
semopts.buf = &mysemds;

if((rc = semctl(sid, 0, IPC_STAT, semopts)) == -1) {
perror("semctl");
exit(1);
}

/* return number of semaphores in set */
return(semopts.buf->sem_nsems);
}

void dispval(int sid)
{
int semval;

semval = semctl(sid, 0, GETVAL, 0);
printf("semval is %d\n", semval);
}



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


With any suggestions or questions please feel free to contact us