質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

受付中

1つの共有メモリで2つの変数

bou_oboreta
bou_oboreta

総合スコア1

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

2回答

0評価

0クリップ

429閲覧

投稿2021/12/30 14:31

1つの共有メモリで2つの変数A,Bを扱うにはどうすればいいでしょうか?

shmgetで共有メモリを確保しています。
同じ共有メモリIDでA,Bという変数を別々に扱いたいのですが、方法はありますでしょうか?

C

#include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <stdlib.h> #include <string.h> int main (int argc, char *argv[]) { int id, tmp, i; int *counter; int num=1; int A=100, B=0; struct shmid_ds buf; srand ((unsigned) time (NULL)); if (argc == 1) { /* 引数がない場合は共有メモリを確保 */ if ((id = shmget(IPC_PRIVATE, sizeof(int), IPC_CREAT|0666)) == -1) { perror("shmget"); exit(EXIT_FAILURE); } printf("shared memory ID = %d\n", id); } else if (argc == 2) { /* 第1引数に共有メモリIDが指定された場合 */ id=atoi(argv[1]); } else { fprintf(stderr, "%s [<shared memory ID>] \n", argv[0]); exit(EXIT_FAILURE); } /* 共有メモリ領域を counter にアタッチ */ counter = (int *) shmat (id,0,0); if (argc == 1) *counter = 0; for (i = 0; i < 100; i++) { /* 100回移動をくり返す */ fprintf(stderr, "A = %d, ", A); sleep(rand()%4); A-=num; *counter=A; fprintf(stderr, "B = %d ", B); sleep(rand()%4); B+=num; *counter=B; } shmctl (id, IPC_STAT,&buf); if(shmdt(counter)==-1) { /* デタッチ */ perror("shmdt"); exit(EXIT_FAILURE); } if (buf.shm_nattch==1) { if (shmctl (id, IPC_RMID, 0) == -1) { perror ("chmctl"); } } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。