Жигaн
Новичок
shmop_open под win
ОС: winXP
Для shmop_open Не работает флаг 'n' для win платформы т.е.
всегда возвращает false.
если заменить флаг 'n' на 'c' -- все ок.
Может проблемы с эмуляцией shmget ф-ции под win?
файл: TSRM/tsrm_win32.c
для флага 'n'(shmop_open) flags=IPC_CREAT|IPC_EXCL, имхо код должен быть такой
или я неправ?
ОС: winXP
Для shmop_open Не работает флаг 'n' для win платформы т.е.
PHP:
$result = shmop_open(0x11223344, 'n', 0600, 1024);
var_dump($result);
если заменить флаг 'n' на 'c' -- все ок.
Может проблемы с эмуляцией shmget ф-ции под win?
файл: TSRM/tsrm_win32.c
Код:
TSRM_API int shmget(int key, int size, int flags)
{
...
...
shm_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_segment);
info_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_info);
if ((!shm_handle && !info_handle)) {
if (flags & IPC_EXCL) {
return -1;
}
if (flags & IPC_CREAT) {
shm_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, size, shm_segment);
info_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(shm->descriptor), shm_info);
created = TRUE;
}
if ((!shm_handle || !info_handle)) {
return -1;
}
}
...
...
}
Код:
TSRM_API int shmget(int key, int size, int flags)
{
...
...
shm_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_segment);
info_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_info);
if ((!shm_handle && !info_handle)) {
if (flags & IPC_CREAT) {
shm_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, size, shm_segment);
info_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(shm->descriptor), shm_info);
created = TRUE;
}
if ((!shm_handle || !info_handle)) {
return -1;
}
} else {
if (flags & IPC_EXCL) {
return -1;
}
}
...
...
}