2016-12-07 197 views
0

我有另一個程序1,我創建一個共享內存,我有一個程序2,我想檢查共享內存是否已經創建,如果沒有,然後打印錯誤和不要做任何事情,如果它已經創建,然後接受它。 如果之前創建共享內存然後它可以正常工作,我可以訪問它,但即時通訊的問題是,如果共享內存尚未創建,那麼而不是什麼都不做和打印錯誤的program2創建共享內存和我不希望發生這種情況。 任何幫助將不勝感激,請問任何可能有用的信息,謝謝!檢查共享內存是否存在,以及是否存在共享內存

void main(){ 

int sm_id; 
sm_id = shmget(9000, MAX_USERS * sizeof(User), IPC_CREAT | IPC_EXCL | 0666); 
if(sm_id>0){ 
    perror("Shared memory has not been created yet"); 
    exit(1); 
}else{ 
    sm_id = shmget(9000, MAX_USERS * sizeof(User), IPC_CREAT | 0666); 
    list = (User *)shmat(sm_id,0,0); 
    exit_on_null(list, "Exit on null(error attach)"); 
} 

} 
+2

也許只是調用'shmget'沒有'IPC_CREAT'標誌? – gudok

+0

您確定要使用System V共享內存嗎? POSIX共享內存更容易處理。檢查'shm_open'。 – jch

+0

它的工作,即時通訊使用shmget,因爲它的一個項目,因爲它的教授使用...無論如何感謝提示 – GamerGirl

回答

5

請勿使用IPC_CREAT標誌。如果該共享內存不存在,它將返回錯誤ENOENT

之進一步資料手冊頁..

SHMGET

+0

它的工作,我認爲我們總是不得不使用IPC_CREAT爲了它的工作,因爲我沒有看到沒有它的例子。謝謝您的幫助! – GamerGirl

+0

@Livernal: - )...檢查手冊頁,您將從那裏獲得更多信息。 – sas