2017-05-02 39 views
0
int shmCreate(int id, int size) 
{ 
    int shmid 
    key_t key; 

    if ((key = ftok(".", id)) == -1) { 
     perror("ftok"); 
     exit(1); 
    } 

    if ((shmid = shmget(key, size, IPC_CREAT | 0666)) == -1) { 
     perror("shmget"); 
     exit(1); 
    } 

    return shmid; 
} 

我试图编写使用shmget函数,其中函数获取大小作为参数。我得到无效参数错误,除了大小= 1。除了1我通过大小我得到错误,但内存段创建时,我检查ipcs -m,它的大小为1。我摆脱了这个错误?C linux shmget无效的参数

+0

'key'的值是什么,即你确定'ftok'没有失败? – bruceg

+0

84008723,但这是否有所作为?不,如果它是'-1',它不会失败 – damian241132

+0

,这意味着'ftok'失败。检查错误呼叫总是很明智的。 – bruceg

回答

0

按照手册页shmget的(2):

EINVAL一种给定的关键段存在,但大小是段大于 大小。

您无法附加已存在的较大尺寸的细分受众群。所以你需要先删除它或使用不同的密钥。