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

UptoLike

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

73
{
int semval;
semval = semctl(sid, member, GETVAL, 0);
return(semval);
}
void changemode(int sid, char *mode)
{
int rc;
union semun semopts;
struct semid_ds mysemds;
/* Получаем текущее значение для внутренней структуры данных */
semopts.buf = &mysemds;
rc = semctl(sid, 0, IPC_STAT, semopts);
if (rc == -1) {
perror("semctl");
exit(1);
}
printf("Old permissions were %o\n", semopts.buf->sem_perm.mode);
/* Изменяем права доступа к семафору */
sscanf(mode, "%ho", &semopts.buf->sem_perm.mode);
/* Обновляем внутреннюю структуру данных */
semctl(sid, 0, IPC_SET, semopts);
printf("Updated...\n");
}
void dispval(int sid, int member)
{
int semval:
semval = semctl(sid, member, GETVAL, 0);
printf("semval for member %d is %d\n", member, semval);
}
void usage(void)
{
fprintf(stderr, "semtool - A utility for tinkering with
semaphores\n");
fprintf(stderr, "\nUSAGE: semtool4 (c)reate <semcount>\n");
fprintf(stderr, " (l)ock <sem #>\n");
fprintf(stderr, " (u)nlock <sem #>\n");
fprintf(stderr, " (d)elete\n");
fprintf(stderr, " (m)ode <mode>\n");
exit(1);
}
Блокировка участков файлов
Если говорить именно о файле с базой данных, оказывается удобно
блокировать доступ к участкам файла. При этом целесообразно ввести два типа
блокировок: на чтение и на запись. Блокировка на чтение разрешает другим процессам
читать из заблокированного участка и даже ставить туда такую же блокировку, но
запрещает писать в этот участок и, тем более, блокировать его на запись.
       {
           int semval;

           semval = semctl(sid, member, GETVAL, 0);
           return(semval);
       }

       void changemode(int sid, char *mode)
       {
          int rc;
          union semun semopts;
          struct semid_ds mysemds;

           /* Получаем текущее значение для внутренней структуры данных */
           semopts.buf = &mysemds;

           rc = semctl(sid, 0, IPC_STAT, semopts);

           if (rc == -1) {
              perror("semctl");
              exit(1);
           }

           printf("Old permissions were %o\n", semopts.buf->sem_perm.mode);

           /* Изменяем права доступа к семафору */
           sscanf(mode, "%ho", &semopts.buf->sem_perm.mode);

           /* Обновляем внутреннюю структуру данных */
           semctl(sid, 0, IPC_SET, semopts);

           printf("Updated...\n");

       }

       void dispval(int sid, int member)
       {
          int semval:

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

       void usage(void)
       {
          fprintf(stderr,   "semtool - A utility for tinkering with
semaphores\n");
          fprintf(stderr,   "\nUSAGE: semtool4 (c)reate \n");
          fprintf(stderr,   "                (l)ock \n");
          fprintf(stderr,   "                (u)nlock \n");
          fprintf(stderr,   "                (d)elete\n");
          fprintf(stderr,   "                (m)ode \n");
          exit(1);
       }

       Блокировка участков файлов
       Если говорить именно о файле с базой данных, оказывается удобно
блокировать доступ к участкам файла. При этом целесообразно ввести два типа
блокировок: на чтение и на запись. Блокировка на чтение разрешает другим процессам
читать из заблокированного участка и даже ставить туда такую же блокировку, но
запрещает писать в этот участок и, тем более, блокировать его на запись.



                                                                               73