Различные ключи, использующие ftok (имя файла, 1) - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть 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 здесь говорит:

Возвращаемое значение должно отличаться, когда (одновременно существующие) файлы или идентификаторы проекта отличается.

Я не совсем понимаю одновременно существующее? Есть ли проблема с моим кодом выше. Большое спасибо, если вы можете сказать мне, как это исправить.

...