[devel] IPC и сборка мусора
Denis Ovsienko
=?iso-8859-1?q?pilot_=CE=C1_dgtu=2Edonetsk=2Eua?=
Вс Сен 7 14:31:35 MSD 2003
Целью данного письма является показать, что можно программировать IPC так,
чтобы не оставлять мусор, причём это не особенности замшелых ядер,
описанные в устаревших книжках. Вот текст программы:
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define SIZE 1024
int main (int argc, char * argv[])
{
key_t key = ftok (argv[0], 1);
int shmid = shmget (key, SIZE, IPC_CREAT | 0600);
void * memory = NULL;
if (shmid == -1) return 1;
memory = shmat (shmid, NULL, 0);
if (argc >= 2 && !strcmp (argv[1], "rm")) shmctl (shmid, IPC_RMID,
NULL);
return 0;
}
Вот 3 последовательных запуска. Прошу обратить внимание на уже
существующий до запуска сегмент: nattch=2, status=dest. После двух shmdt()
либо после простого завершения 2-х подсоединённых процессов сегмент будет
удалён. Но вернёмся к тесту:
[pilot на m46 devel]$ ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 27131910 pilot 777 393216 2 dest
------ Semaphore Arrays --------
key semid owner perms nsems
------ Message Queues --------
key msqid owner perms used-bytes messages
[pilot на m46 devel]$ ./IPCtest rm
[pilot на m46 devel]$ ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 27131910 pilot 777 393216 2 dest
------ Semaphore Arrays --------
key semid owner perms nsems
------ Message Queues --------
key msqid owner perms used-bytes messages
[pilot на m46 devel]$ ./IPCtest
[pilot на m46 devel]$ ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x0102be47 53968897 pilot 600 1024 0
0x00000000 27131910 pilot 777 393216 2 dest
------ Semaphore Arrays --------
key semid owner perms nsems
------ Message Queues --------
key msqid owner perms used-bytes messages
[pilot на m46 devel]$ ./IPCtest rm
[pilot на m46 devel]$ ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 27131910 pilot 777 393216 2 dest
------ Semaphore Arrays --------
key semid owner perms nsems
------ Message Queues --------
key msqid owner perms used-bytes messages
[pilot на m46 devel]$ uname -a
Linux m46.pilot 2.4.20-alt5-pim #1 Tue Apr 22 22:09:54 EEST 2003 i686
unknown unknown GNU/Linux
Вот и всё, и не нужно говорить, что это не работает. Точно такое же
поведение можно ожидать и на других POSIX-системах. ALTLinux Master
2.2, ядро 2.4.20-alt5-up с включенным IGMP+PIM.
--
DO4-UANIC
Подробная информация о списке рассылки Devel