Возьмем semget(2),
int id=semget(IPC_PRIVATE, 1, IPC_CREAT | IPC_EXCL);
теперь в других процессах, если они знают id,
они могут сделать так
semget(id, ...);
тоже самое с msgget и shmget,
также заметим что IPC_PRIVATE==0,
и если запустить на только что загруженном 2.6.12, где до этого не вызывались
semget(msgget, shmget),
int id=semget(IPC_PRIVATE, 1, IPC_CREAT | IPC_EXCL);
в качестве id получим 0, т.е. IPC_PRIVATE,
спрашивается почему так и не является ли это багом?
ЗЫ
если посмотреть код ядра
asmlinkage long sys_semget (key_t key, int nsems, int semflg)
{
int id, err = -EINVAL;
struct sem_array *sma;
if (nsems < 0 || nsems > sc_semmsl)
return -EINVAL;
down(&sem_ids.sem);
if (key == IPC_PRIVATE) {
err = newary(key, nsems, semflg);
видно что при key==IPC_PRIVATE никакие флаги не проверяются,
а сразу создается новый семафор.
Ответ на:
комментарий
от Die-Hard
Ответ на:
комментарий
от Die-Hard
Ответ на:
комментарий
от fghj
Ответ на:
комментарий
от Die-Hard
Ответ на:
комментарий
от fghj
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Семафоры (2005)
- Форум ipc+system=мистика ? (2005)
- Форум Использовать семафоры для взаимного исключения (2018)
- Форум Семафоры (2003)
- Форум Вопрос по семафорам (2002)
- Форум Семафоры, не правильное отображение строки , язык си (2012)
- Форум очереди сообщений ipcs premission denied (2005)
- Форум Не отправляется сообщение через Message Queue (IPC) (2011)
- Форум Ошибка: undefined reference to 'shm_unlink' (2010)
- Форум ftok+msgget (2005)