У меня есть libxxx.so, сегмент кода здесь (FILENAME - макрос):
static int shm_get(key_t *key)
{
//judge the file existence
if ( access(FILENAME, F_OK) != 0 )
{
//create file
int fd = open(FILENAME, O_CREAT|O_RDWR, 0666);
if(-1 == fd)
{
//write_error_log
return -1;
}
chmod(FILENAME,666);
}
if ((key_t)-1 == (*key = ftok(FILENAME, 1)))
{
//write_error_log
return -1;
}
return shmget(*key, 0, 0666);
}
У меня есть 8 процессов, вызывающих shm_get, чтобы получить ключ и затем присоединить его к общей памяти, Произошло что-то странное например:
[root c++]#ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
KeyA idA root 666 1024 1
KeyB idB root 666 1024 7
страница man ftok здесь говорит:
Возвращаемое значение должно отличаться, когда (одновременно существующие) файлы или идентификаторы проекта отличается.
Я не совсем понимаю одновременно существующее? Есть ли проблема с моим кодом выше. Большое спасибо, если вы можете сказать мне, как это исправить.