2017-05-02 32 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一種給定的關鍵段存在,但大小是段大於 大小。

您無法附加已存在的較大尺寸的細分受衆羣。所以你需要先刪除它或使用不同的密鑰。