Uncle Theodore
написал 21 февраля 2005 года в 01:30 (1180 просмотров)
Ведет себя
неопределенно; открыл 58 тем в форуме, оставил 1537 комментариев на сайте.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
key_t ipc_key;
int mess_id;
int i;
struct mymsgbuf //user-defined structure for messages
{
long mtype;
int mtext;
} msg;
//obtain a key
if((ipc_key = ftok(".", 1)) == -1)
{
printf("Error key generating!\n");
return -1;
};
//create a message queue
if((mess_id = msgget(ipc_key, IPC_CREAT|0660)==-1))
{
printf("Unable to get a message queue!\n");
return -1;
};
//fork a new process
if(fork()) //parent
{
msg.mtype = 4; //parent sends message of type 4
msg.mtext = getpid();
if((msgsnd(mess_id, &msg, sizeof(int), 0))==-1)
perror("PARENT: Writing to a message queue failed: ");
for(i=0;i<5;i++)
{
if((msgrcv(mess_id, &msg, sizeof(int),2,0)) != -1)
//parent waits for messages of type 2
printf("PARENT: received a message from process %i\n", msg.mtext);
msgsnd(mess_id, &msg, sizeof(int), 0);
};
}
else //child
{
msg.mtype = 2; //child sends messages of type 2
msg.mtext = getpid();
if((msgsnd(mess_id, &msg, sizeof(int), 0))==-1)
perror("CHILD: Writing to a message queue failed: ");
for(i=0;i<5;i++)
{
if((msgrcv(mess_id, &msg, sizeof(int),4,0)) != -1)
//child waits for messages of type 2
printf("CHILD: received a message from process %i\n", msg.mtext);
msgsnd(mess_id, &msg, sizeof(int), 0);
};
};
wait(NULL);
msgctl(mess_id, IPC_RMID, NULL); //delete the message queue
return 0;
};
выдает:
CHILD: Writing to a message queue failed: : Identifier removed
PARENT: Writing to a message queue failed: : Identifier removed
Причем, ipcs выдает, что у меня появляется message queue с каким-то номером, которую надо убивать. Спасите остатки волос у меня на голове, объясните, чтО происходит?!!1
Good Luck,
UT
ПЫ-СЫ: пытался создавать queues в процессах (отдельно для папки и сосунка). Результат — тот же. Какого волосатого этот identifier removed?!
Последние комментарии
-
OlegL, 17 декабря 2023 года в 15:00 →
Перекличка
21
-
REDkiy, 8 июня 2023 года в 9:09 →
Как «замокать» файл для юниттеста в Python?
2
-
fhunter, 29 ноября 2022 года в 2:09 →
Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt?
6
-
Иванн, 9 апреля 2022 года в 8:31 →
Ассоциация РАСПО провела первое учредительное собрание
1
-
Kiri11.ADV1, 7 марта 2021 года в 12:01 →
Логи catalina.out в TomCat 9 в формате JSON
1
DevOps as a Service from Palark
24/7 SRE & DevOps service to cover all your Kubernetes needs.

символически подчистив текст (ммм.. «};» — сильнО)
Не понял, как именно ты его почистил?!
Кстати, ты знаешь, у меня mplayer отказывается работать в shm моде. Говорит, апшипка… Я так думаю, надо бы перезапуститься, похоже, засрал я память чем-то неудобоваримым…
Good Luck,
UT
trailing spaces поудалял
«;» апосля «}» тоже…
скомпилировал и запустил…
как именно это? ;)
ну, в смысле, как именно пускаешь и что именно оно тебе отвечает?
хотя, это надо в другой теме и другой ветке, я так думаю… ;)
кстати…
а вот повторный запуск выдаёт:
видимо, на моменте создания/удаления происходит что-то не так:
если изменить немного код:
то выполнение завершается с:
поэтому, что-то неправильно при создании или удалении очереди.
кстати, может её сделать для этого примера IPC_PRIVATE?
хотя, один фиг, теперь только перезагрузкой спасаться… :(
<font size=«-2»>добавлено позднее</font>
main() { struct msqid_ds buf; //... //create a message queue if((mess_id = msgget(ipc_key, IPC_CREAT|0660)==-1)) { printf("Unable to get a message queue!\n"); return -1; } if (msgctl(mess_id, IPC_STAT, &buf) == -1) { perror("msgctl: msgctl failed"); return -1; }тоже ругается
Нет, перезагрузка необязательна (наверное). Можно воспользоваться командой
ipcs и ipcrm
А mplayer не может создать shared memory segment…
Спасибо, я еще ковыряюсь…
Good Luck,
UT
ага, помогло :) спасиба.
кстати, после этого оно уже больше не работает…
кстати, повторные запуски почему-то возвращают……