From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Sun, 7 Sep 2003 13:31:35 +0300 (EEST) From: Denis Ovsienko To: devel@altlinux.ru Message-ID: <20030907132023.G96874@elefant.dgtu.donetsk.ua> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=KOI8-R Content-Transfer-Encoding: 8BIT Subject: [devel] =?koi8-r?b?SVBDIMkg08LP0svBIM3V08/SwQ==?= X-BeenThere: devel@altlinux.ru X-Mailman-Version: 2.1.2 Precedence: list Reply-To: ALT Devel discussion list List-Id: ALT Devel discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Sep 2003 10:24:30 -0000 Archived-At: List-Archive: List-Post: Целью данного письма является показать, что можно программировать IPC так, чтобы не оставлять мусор, причём это не особенности замшелых ядер, описанные в устаревших книжках. Вот текст программы: #include #include #include #include #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