[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