case 'w':

  shm_write(shmid, ptr, argv[2]);

  break;

 case 'r':

  shm_read(shmid, ptr);

  break;

 case 'd':

  shm_rm(shmid);

  break;

 case 'm':

  shm_change_mode(shmid, argv[2]);

  break;

 }

}

/* Функция для записи в сегмент: ей нужно передать

ID сегмента, адрес привязки и записываемую информацию */

shm_write(int shmid, char *ptr, char *info) {

 strcpy(ptr, info);

}

/* Функция чтения информации из сегмента */

shm_read(int shmid, char *ptr) {

 printf('Информация из сегмента: %s ', ptr);

}

/* Функция удаления сегмента */

shm_rm(int shmid) {

 shmctl(shmid, IPC_RMID, 0);

 printf('Сегмент помечен на удаление ');

}

/* Функция изменения прав доступа. Ей нужно передать

 идентификатор сегмента и права доступа в виде строки,

 например, '0666' * /

shm_change_mode(int shmid, char *mode) {

 struct shmid_ds mds;

 shmctl(shmid, IPC_STAT, &mds);

 printf('Старые права доступа: %o ', mds.shm_perm.mode);

 sscanf(mode, '%o', &mds.shm_perm.mode);

 shmctl(shmid, IPC_SET, &mds);

 printf('Новые права доступа: %o ', mds.shm_perm.mode);

}

Использовать программу нужно так:

./shm_demo -w строка

запись строки в сегмент

./shm_demo -r

чтение строки из сегмента

./shmdemo -m права

изменение прав доступа

./shm_demo -d

удаление сегмента

Выполните команду

$ ./shm_demo -w string

А затем запустите утилиту ipcs. Вы увидите, что наша программа создала разделяемый сегмент памяти:

------ Shared Memory Segments ------

key shmid owner perms bytes nattch status

0x44063781 0 root 660 256 0

------ Semaphore Arrays ------

key semid owner perns nsems status

------ Message Queues ------

key msqid owner perms used-bytes messages

Затем выполните команду:

$ ./shm_demo -r

Вы получите информацию:

Информация из сегмента: string

Попробуем изменить права доступа, а затем просмотреть информацию командой ipcs:

$./shm_demo -m 0666

------ Shared Memory Segments ------

key        shmid owner perms bytes nattch status

0x44063781     0 root    660   256        0

------ Semaphore Arrays ------

key        semid owner perms nsems        status

------ Message Queues ------

key        msqid owner perms used-bytes   messages

Глава 27

Создание сетевого приложения в Linux

В главе 6 я ввел основные сетевые понятия, перечислил самые популярные протоколы и вкратце рассказал об основе сети Интернет — протоколе TCP/IP. В этой главе я собираюсь подробнее остановиться на протоколах TCP/IP и ICMP и показать, какие средства вы можете использовать для написания собственных приложений для работы в сети.

27.1. Протокол TCP/IP

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату