 |
Меню |
|
|
|
|
 |
Главная |
|
| Посл.ответ |
Сообщение |
|
Дата: 12 Май, 07:24 · Поправил: qnxloder
2 процесса:
1 делает
MsgSend(coid, NULL, 0, &msg, sizeof(msg) )
2 делает
*msg=5;
MsgReply( rcvid, EOK, msg, sizeof(*msg) )
После Send в msg пусто
А если сделать так, то в msg то что надо:
1 делает
MsgSend(coid, &msg, sizeof(msg), &msg, sizeof(msg) )
2 делает
*msg=5;
MsgReply( rcvid, EOK, msg, sizeof(*msg) )
Почему так может быть?
Благодарю. |
|
Дата: 12 Май, 07:37 · Поправил: JUt
qnxloder
2 делает
msg=5;
MsgReply( rcvid, EOK, msg, sizeof(*msg) )
Если у тебя msg указатель, то надо делать так:
*msg=5;
PS: Вот до чего Си++ людей доводит, не говоря уже о Си+. |
|
Дата: 12 Май, 07:56
qnxloder
2 процесса:
1 делает
MsgSend(coid, NULL, 0, &msg, sizeof(msg) )
Странное намерение - это вы так хотите передать сообщение длины 0? Я совсем не уверен, что это вообще возможно, такую деталь нужно уточнить в HELP - POSIX write(), например, при длине 0 - не устанавливает код ошибки, но никакой фактической передачи данных не производит. У вас же перед MsgReply() наверняка стоит что-то типа MsgReceive() - посмотрите что он принимает. А заодно, хорошо бы посмотреть результат, возвращаемый MsgSend() после такого своего вызова.
|
|
Дата: 12 Май, 08:04
---cut---
Странное намерение - это вы так хотите передать сообщение длины 0?
---cut---
ничего странного, обычное желание засинхронизовать два процесса через SRR, почему бы и нет.
---cut---
Я совсем не уверен, что это вообще возможно, такую деталь нужно уточнить в HELP - POSIX write(), например, при длине 0 - не устанавливает код ошибки, но никакой фактической передачи данных не производит. У вас же перед MsgReply() наверняка стоит что-то типа MsgReceive() - посмотрите что он принимает. А заодно, хорошо бы посмотреть результат, возвращаемый MsgSend() после такого своего вызова.
---cut---
таки SRR ну никак не ложится на POSIX, тем более на File IO
// wbr |
|
Дата: 12 Май, 08:08
Olej
Странное намерение - это вы так хотите передать сообщение длины 0?
А как же это делают изобретатели таких языков как Си+?
Olej
Я совсем не уверен, что это вообще возможно,
И этот человек выпускает альманахи? Да любой здравомыслящий человек после таких (неоднократных) горбух на такие альманахи должен класть трёхэтажные альмапохи. |
|
Дата: 12 Май, 08:18
Olej А заодно, хорошо бы посмотреть результат, возвращаемый MsgSend() после такого своего вызова.
-1 не возвращает.
Olej 2 процесса:
1 делает
MsgSend(coid, &msg, 1, &msg, sizeof(msg) )
Так не работает...
А вот так работает:
MsgSend(coid, &msg, 2, &msg, sizeof(msg) )
К слову у msg длина 116 байт.
Olej У вас же перед MsgReply() наверняка стоит что-то типа MsgReceive() - посмотрите что он принимает.
Принимает он то что и передаю
А вот Replay в ответный буфер ложит см. выше. |
|
Дата: 12 Май, 08:28
MsgSend(coid, &msg, 2, &msg, sizeof(msg) ) возвращает EOK
MsgSend(coid, &msg, 1, &msg, sizeof(msg) ) возвращает EOK
|
|
Дата: 12 Май, 19:30
qnxloder
MsgSend(coid, NULL, 0, &msg, sizeof(msg) )
Даже если есть возможность по MsgSend() отослать 0 байт, то нигде в описаниях:
int MsgSend( int coid,
const void* smsg,
int sbytes,
void* rmsg,
int rbytes );
- я не встречал (ещё раз пересмотрел несколько мест), чтобы в качестве smsg можно было задать NULL... В конце-концов, если так нужно именно 0 байт, попробуйте что-то хоть такое:
int i;
MsgSend(coid, &i, 0, &msg, sizeof(msg) )
- что в этом случае примите на приёмном конце? |
|
Дата: 12 Май, 19:38
qnxloder
MsgReply( rcvid, EOK, msg, sizeof(*msg) )
После Send в msg пусто
Кстати, "после Send в msg пусто" - будет именно, если ответ:
MsgReply( rcvid, EOK, NULL, 0 )
- только разблокирование клиента. Посмотрите, всё ли у вас в порядке с 3-4-м параметром при ответе.
|
|
Дата: 13 Май, 05:00
Olej Даже если есть возможность по MsgSend() отослать 0 байт, то нигде в описаниях:
int MsgSend( int coid,
const void* smsg,
int sbytes,
void* rmsg,
int rbytes );
- я не встречал
MsgSend(coid, NULL, 0, &msg, sizeof(msg))
Это из примера в описании ф-ии MsgKeyData(), MsgKeyData_r(). Olej MsgSend(coid, &i, 0, &msg, sizeof(msg) )
- что в этом случае примите на приёмном конце? Тоже пустое сообщение.
Olej MsgReply( rcvid, EOK, NULL, 0 )
- только разблокирование клиента. Посмотрите, всё ли у вас в порядке с 3-4-м параметром при ответе.
Да смотрел в дебагере, там все ок. |
|
Дата: 16 Авг, 11:58
Если подумать логически, то по идее:
ответ приходит на что-то.
Вы не можете получить ответ, если ничего не сказали.
Если вы желаете что-то услышать - слушайте. Но инициировать диалог не сказав ни слова - странно.
Поэтому, возможно, что MsgSend работает исходя из таких соображений?
|
|
Дата: 5 Сен, 15:03
may be you got some pulse?
try to analyze rcvid
|
|
Дата: 5 Сен, 17:04
Этому посту уже несколько лет. Плохо, что форум не показывает год поста  |
You must login to post.
| | |