From owner-freebsd-amd64@FreeBSD.ORG Sun Nov 23 01:20:52 2008 Return-Path: Delivered-To: freebsd-amd64@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B17BF1065670 for ; Sun, 23 Nov 2008 01:20:52 +0000 (UTC) (envelope-from freebsd@alive.net.ua) Received: from mail.canaltelecom.net (mail.canaltelecom.net [195.93.172.86]) by mx1.freebsd.org (Postfix) with ESMTP id 69E9C8FC08 for ; Sun, 23 Nov 2008 01:20:52 +0000 (UTC) (envelope-from freebsd@alive.net.ua) Received: from c.112.166.a418.sta.adsl.cyfra.net ([62.80.166.112] helo=[127.0.0.1]) by mail.canaltelecom.net with esmtpa (Exim 4.69 (FreeBSD)) (envelope-from ) id 1L43Ai-0000pW-18 for freebsd-amd64@freebsd.org; Sun, 23 Nov 2008 02:49:56 +0200 Message-ID: <4928A8AB.3090306@alive.net.ua> Date: Sun, 23 Nov 2008 02:49:47 +0200 From: andrey artemyev User-Agent: Thunderbird 2.0.0.18 (Windows/20081105) MIME-Version: 1.0 To: freebsd-amd64@freebsd.org Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Subject: problem with IPCS on (FreeBSD 7.0-RELEASE-p5) X-BeenThere: freebsd-amd64@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the AMD64 platform List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 23 Nov 2008 01:20:52 -0000 FreeBSD 7.0-RELEASE-p5 amd64 Programming C/C++. The down Queues (msgid = msgget ....) after message reception (msgrcv) # ipcs Message Queues: T ID KEY MODE OWNER GROUP q 327680 1174 --rw-rw-rw- root wheel ..... Example: msgserv.c ------------------- #include #include #include #include #include #include #include #include "msgtypes.h" int main(int argc, char * argv[]) { struct msg_t message; int msgid; char * response = "Ok!"; msgid = msgget(KEY, 0666 | IPC_CREAT); msgrcv(msgid, &message, sizeof(message), 2, 0); /* ATTENTION!!! After "msgrcv(msgid, &message, sizeof(message), 2, 0);" - Queues(msgid) DOWN Helps only to create anew "msgid = msgget(KEY, 0666 | IPC_CREAT);" */ printf("Client (pid = %i) sent: %s", message.snd_pid, message.body); message.mtype = 1; message.snd_pid = getpid(); strcpy(message.body, response); msgsnd(msgid, &message, sizeof(message), 0); // errno = 22 (bad msgid) msgrcv(msgid, &message, sizeof(message), 2, 0); msgctl(msgid, IPC_RMID, 0); return EXIT_SUCCESS; } ------------------- msgtypes.h ------------------- #ifndef MSG_TYPES #define MSG_TYPES #define KEY 1174 #define MAXLEN 512 struct msg_t { long mtype; int snd_pid; char body[MAXLEN]; }; #endif ------------------- msgcli.c ------------------- #include #include #include #include #include #include #include "msgtypes.h" int main(int argc, char * argv[]) { int msgid; int i; struct msg_t message; char buf[MAXLEN]; msgid = msgget(KEY, 0666); if (msgid == -1) { printf("Server is not running!\n", msgid); return EXIT_FAILURE; } i = 0; while ( (i < (MAXLEN - 1)) && ((message.body[i++] = getchar()) != '\n') ); message.body[i] = '\0'; message.mtype = 2; message.snd_pid = getpid (); msgsnd(msgid, &message, sizeof(message), 0); msgrcv(msgid, &message, sizeof(message), 1, 0); printf("Server (pid= %i) responded: %s\n", message.snd_pid, message.body); message.mtype = 2; msgsnd(msgid, &message, sizeof(message), 0); return EXIT_SUCCESS; } ------------------- Tested on FreeBSD 6.2 i386 - All has passed remarkably, errors were not