Пишу тут программу, в которой некоторое количество процессов (<= 10) должно работать с разделяемой памятью.
И пришло мне в голову использовать именованный семафор, чтобы решить сразу две задачи - обеспечить монопольный доступ к разделяемой памяти, и ограничить сверху количество одновременно запущенных процессов.
Компилируется и собирается всё нормально, а при запуске падает в кору((
Bad system call (core dumped)
Думал, может где в другом месте грабли - написал простейшую программу:
Код: Выделить всё
#include <semaphore.h>
#include <stdio.h>
#include <fcntl.h>
#define PATH_MAX 255
char *
px_ipc_name(const char *name)
{
char *dir, *dst, *slash;
if ( (dst = malloc(PATH_MAX)) == NULL)
return NULL;
if ( (dir = getenv("PX_IPC_NAME")) == NULL) {
#ifdef POSIX_IPC_PREFIX
dir = POSIX_IPC_PREFIX;
#else
dir = "/tmp/";
#endif
}
slash = (dir[strlen(dir) - 1] == '/') ? "" : "/";
snprintf(dst, PATH_MAX, "%s%s%s", dir, slash, name);
return (dst);
}
int
main()
{
sem_t *sem;
sem = sem_open(px_ipc_name("sem1"), O_CREAT | O_EXCL, 0644, 1);
printf("aagrrrhh");
sem_close(sem);
sem_unlink(px_ipc_name("sem1"));
return 0;
}Всё равно тот же результат - ффкору (пардон))
Может кто решал подобные проблемы?