私はセマフォについて知っていると言わなければなりませんが、それらの使い方はまだわかりません。つまり、int lock
が特定の値を取得したときに制御をデータセグメントに渡すのですが、この時点でコードを機能させるにはどうすればよいのでしょうか。この時点でコードがフリーズし、理由がわかりません...
sc(server)-最初に実行されます
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/wait.h>
#include "st.h"
int main(){
int shmid,i;
int w =1;
struct msg* m;
shmid = shmget(1271,sizeof(struct msg), IPC_CREAT|IPC_EXCL|0600);
if(shmid == -1){
perror("~~~Shmid");
exit(1);
}
m = shmat(shmid,0,0);
printf("segment attached to structure");
do{
printf("waiting...");
sleep(1);
}while(m->lock != 1);
if(m->lock == 1)
printf("lock open!");
shmdt(m);
return 0;
}
cc(クライアント)
int main(int argc, char *argv[]){
if(argc != 2)
perror("~~~ ./c [file name]");
exit(1);
int shmid;
struct msg* m;
shmid = shmget(1271,0,0);
if(shmid == -1){
perror("~~~Shmid");
exit(1);
}
m = shmat(shmid,0,0);
m->f = *argv[1];
m->lock = 1;
shmdt(m);
return 0;
}
st.h
struct msg{
char f[50];
int lock;
};