Недавно решил взяться за разработку многопроцессного приложения. С самими процессами более или менее разобрался.
Начал появляться вопрос про передачу данных между процессами. Почитав литературу нашел подходящий для меня способ. Этим способом оказалась очередь сообщений. скопипастил пример из статьи откомпилировался он даже с первой попытки, но вот загвоздка сообщения не отправляются и соответственно не читаются... взял пример из пакета fpc-build(использую Gentoo так что там исходники) откомпилировал, запускаю и вижу что отправка опять не проходит. Возвращался код ошибки 14 - ESysEFAULT - неверный адрес.
Собственно вопрос. В чем тут может быть ошибка: в настройке системы или параметрах компиляции или может еще в чем-то?
fpc linux и мультипроцессность.
Модератор: Модераторы
Не пользуйтесь ими. Они давно устарели и присутствуют лишь для совместимости с какими-то очень старыми программами. Современным программам для межпроцессного обмена рекомендуется использовать сокеты (в том числе и локальные, если обмен ограничен одной машиной), отоброжаемую память (man mmap2). Если обмена много, можно посмотреть на современные библиотеки, например ZeroMQ. Так же стоит обратиться к книге "Искусство программирования UNIX" Эрика Реймонда, там вопросы актуальных средств и интерфейсов освещаются.
http://www.faqs.org/docs/artu/ch07s02.html#id2922148
http://www.faqs.org/docs/artu/ch07s03.html#id2923376
The upper, message-passing layer of System V IPC has largely fallen out of use. The lower layer, which consists of shared memory and semaphores, still has significant applications under circumstances in which one needs to do mutual-exclusion locking and some global data sharing among processes running on the same machine. These System V shared memory facilities evolved into the POSIX shared-memory API, supported under Linux, the BSDs, MacOS X and Windows, but not classic MacOS.
http://www.faqs.org/docs/artu/ch07s02.html#id2922148
The System V IPC facilities are present in Linux and other modern Unixes. However, as they are a legacy feature, they are not exercised very often. The Linux version is still known to have bugs as of mid-2003. Nobody seems to care enough to fix them.
http://www.faqs.org/docs/artu/ch07s03.html#id2923376
Спасибо за совет... Однако мне нужны были именно очереди сообщений...
PS если вдруг появится еще такой же упертый как и я - то пусть знает что эта проблема возникает на 64-битных системах и связана она с тем, что тип long имеет размер в 8 байт а longint(который используется во всех примерах для fpc) 4байта таким образом получаем, что в записи TMsgBuf поле mtype должно иметь тип int64.
PS если вдруг появится еще такой же упертый как и я - то пусть знает что эта проблема возникает на 64-битных системах и связана она с тем, что тип long имеет размер в 8 байт а longint(который используется во всех примерах для fpc) 4байта таким образом получаем, что в записи TMsgBuf поле mtype должно иметь тип int64.
