このテキストブックの POSIX 共有メモリのセクションについて説明します。いくつかの変更を加えるまで、本からコードをコンパイルすることができませんでした。共有メモリの考え方とそれを開く方法は理解していますが、読み取り/書き込みについてはまだ混乱しています。教科書のコードは、hello world 文字列の例を示していましたが、それを int、配列、構造体などに適用する方法がわかりません。これが私が取り組んでいる教科書のコードです。書き込みはこちら。
const int SIZE = 4096;
const char *name = "OS";
const char *message_0 = "Hello";
const char *message_1 = "World!";
int shm_fd;
void *ptr;
shm_fd = shm_open(name, O_CREAT | O_RDWR, 0666);
ftruncate(shm_fd, SIZE);
ptr = mmap(0, SIZE, PROT_WRITE, MAP_SHARED, shm_fd, 0);
//sprintf(ptr, "%s", message_0); //non working text book code
sprintf((char*)ptr, "%s", message_0); //my change to get it to work
ptr += strlen(message_0);
//sprintf(ptr, "%s", message_1);
sprintf((char*)ptr, "%s", message_1);
ptr += strlen(message_1);
で、読み物はこちら。
const int SIZE = 4096;
const char *name = "OS";
int shm_fd;
void *ptr;
shm_fd = shm_open(name, O_RDONLY, 0666);
ptr = mmap(0, SIZE, PROT_READ, MAP_SHARED, shm_fd, 0);
printf("%s", (char*)ptr);
shm_unlink(name);
これをintの書き込み/読み取りに変更しようとしましたが、うまくいきませんでした。私は、次のような int に対して何かできるはずだという印象を受けました。
*ptr = 2;
ptr++;
しかし、私はそれを得ることができませんでした。誰かがそれをよりよく説明できますか?ありがとう。