2016-12-07 10 views
0

私は共有メモリを作成し、共有メモリが作成されているかどうかをチェックしたいプログラム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

はたぶん単に 'IPC_CREAT'フラグなし' shmget'を呼び出すために...さらに詳しい情報については、manページを参照してください? – gudok

+0

System V共有メモリを使用してもよろしいですか? POSIX共有メモリは、使用する方がはるかに簡単です。 'shm_open'をチェックしてください。 – jch

+0

それはプロジェクトで、教授がそれを使用しているので、shmgetを使用していました。とにかくチップのおかげで。 – GamerGirl

答えて

5

IPC_CREATフラグを使用しないでください。共有メモリが存在しない場合、エラーENOENTを返します。

SHMGET

+0

私は見たことがないので、私はいつもIPC_CREATを使用しなければならなかったそれなしの例助けてくれてありがとう! – GamerGirl

+0

@Livernal: - )... manページも確認してください。そこからさらに情報が得られます。 – sas

関連する問題