Лекции по курсу "Системное программирование для UNIX". Литвинов Д.Г. - 70 стр.

UptoLike

Составители: 

70
разделяемыми ресурсами через стандартные скрипты shell. Синтаксис командной
строки:
Создание множества семафоров semtool c (количество семафоров в множестве)
Запирание семафора semtool l (номер семафора для запирания)
Отпирание семафора semtool u (номер семафора для отпирания)
Изменение прав доступа (mode) semtool m (mode)
Удаление множества семафоров semtool d
Примеры использования semtool:
semtool c 5
semtool l
semtool u
semtool m 660
semtool d
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#define SEM_RESOURCE_MAX 1
/* Начальное значение для всех семафоров */
void opensem(int *sid, key_t key);
void createsem(int *sid, key_t key, int members);
void locksem(int sid, int member);
void unlocksem(int sid, int member);
void removesem(int sid);
unsigned short get_member_count(int sid);
int getval(int sid, int member);
void dispval(int sid, int member);
void changemode(int sid, char *mode);
void usage(void);
int main(int argc, char *argv[])
{
key_t key;
int semset_id;
if(argc ==1)
usage();
/* Создаем особый ключ через вызов ftok() */
key = ftok(".", 's');
switch(tolower(argv[1][0]))
{
case 'c': if(argc != 3)
usage();
createsem(&semset_id, key, atoi(argv[2]));
break;
case 'l': if(argc != 3)
usage();
opensem(&semset_id, key);
locksem(semset_id, atoi(argv[2]));
break;
case 'u': if(argc != 3)
usage();
opensem(&semset_id, key);
unlocksem(semset_id, atoi(argv[2]));
break;
разделяемыми ресурсами через стандартные скрипты shell. Синтаксис командной
строки:
Создание множества семафоров        semtool c (количество семафоров в множестве)
Запирание семафора                  semtool l (номер семафора для запирания)
Отпирание семафора                  semtool u (номер семафора для отпирания)
Изменение прав доступа (mode)       semtool m (mode)
Удаление множества семафоров        semtool d
        Примеры использования semtool:
       semtool   c 5
       semtool   l
       semtool   u
       semtool   m 660
       semtool   d

       #include   
       #include   
       #include   
       #include   
       #include   
       #include   

       #define SEM_RESOURCE_MAX    1
       /* Начальное значение для всех семафоров */

       void opensem(int *sid, key_t key);
       void createsem(int *sid, key_t key, int members);
       void locksem(int sid, int member);
       void unlocksem(int sid, int member);
       void removesem(int sid);
       unsigned short get_member_count(int sid);
       int getval(int sid, int member);
       void dispval(int sid, int member);
       void changemode(int sid, char *mode);
       void usage(void);

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

            if(argc ==1)
               usage();

            /* Создаем особый ключ через вызов ftok() */
            key = ftok(".", 's');

            switch(tolower(argv[1][0]))
            {
               case 'c': if(argc != 3)
                            usage();
                         createsem(&semset_id, key, atoi(argv[2]));
                         break;
               case 'l': if(argc != 3)
                            usage();
                         opensem(&semset_id, key);
                         locksem(semset_id, atoi(argv[2]));
                         break;
               case 'u': if(argc != 3)
                            usage();
                         opensem(&semset_id, key);
                         unlocksem(semset_id, atoi(argv[2]));
                         break;



       70