セマフォを使用して、プロセス間の通信を含むいくつかのコードを処理しています。私はこのような構造を作りました:
typedef struct container {
sem_t resource, mutex;
int counter;
} container;
そのように使用します(メインアプリと下位プロセスで同じ)
container *memory;
shm_unlink("MYSHM"); //just in case
fd = shm_open("MYSHM", O_RDWR|O_CREAT|O_EXCL, 0);
if(fd == -1) {
printf("Error");
exit(EXIT_FAILURE);
}
memory = mmap(NULL, sizeof(container), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
ftruncate(fd, sizeof(container));
sem_関数の1つを使用するとすべて問題ありませんが、次のようなことをしようとすると
memory->counter = 5;
動作しません。おそらくポインタに何か問題がありましたが、ほとんどすべてを試しましたが、何も機能していないようです。プロセス間で変数や構造などを共有するためのより良い方法があるのではないでしょうか。残念ながら、ブーストなどを使用することは許可されていません。コードは教育目的であり、可能な限りシンプルに保つことを目的としています。