OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

forkとグローバル変数について

  • すぐに回答を!
  • 質問No.203778
  • 閲覧数2930
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 22% (2/9)

上記タイトルについて質問です。
グローバル変数で定義した変数(int型)
をforkで作成した子プロセス間で使用したいのですがうまくいきません。実際には以下のように定義しています。
int flg=0;
main()
{
 if(( i=fork() )==0){
 flg = 1; /* こっちをA */
 } else {
 sleep(3);
 printf(" flg=%d\n", flg ); /* こっちをB */
 }
}
こういった使い方は間違いなのでしょうか?
また、上記にてA側で変更したグローバル変数の値をB側でも使用することが出来る方法を教えて下さい。(グローバル変数以外でも同様の処理が行えればそれでもいいので教えて下さい。)
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル13

ベストアンサー率 34% (574/1662)

すでに回答にあるとおりできません.

プロセス間で同じ変数を使う場合は共有メモリを使えば可能です。
多分、現在のunix系のOSならどれでも使えるだろうとは思います。
shmget, shmctl, shmat, shmdtあたりを調べてみてください。
ただ、こういうのを使う場合は、いろいろと注意が必要です。


パイプはプロセス間でデータをやりとりするために、
太古(?)のunixからある機能ですが、
共有とはちがいますね。
これはあるプロセスがwriteしたデータを別なプロセスがreadできるというだけです。
お礼コメント
badbeat

お礼率 22% (2/9)

共有メモリですか。確かにそうですね。
共有メモリ上に展開されていれば使用できそうですね。
ありがとうございます。やってみます。
投稿日時 - 2002-01-24 09:08:32
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル12

ベストアンサー率 40% (230/562)

forkでプロセスが分岐したあとは、変数を変更してもそれぞれのコピーを変更するだけなので、双方に影響を及ぼしません。 これはforkが作るのがスレッドではなくプロセスであるからです。 UNIXのCについてはあまりよく知らないのですが、プロセス間でデータを共有するにはパイプを使う必要があります。 んんん、ほかに何かいい方法があるかもしれないので、締め切らずに待ってみてください。 ...続きを読む
forkでプロセスが分岐したあとは、変数を変更してもそれぞれのコピーを変更するだけなので、双方に影響を及ぼしません。
これはforkが作るのがスレッドではなくプロセスであるからです。
UNIXのCについてはあまりよく知らないのですが、プロセス間でデータを共有するにはパイプを使う必要があります。

んんん、ほかに何かいい方法があるかもしれないので、締め切らずに待ってみてください。
お礼コメント
badbeat

お礼率 22% (2/9)

そうですか。やっぱり使えないんですね。(ちょっとがっかりです)
パイプについて少し調べてみたいと思います。
ありがとうございました。もう少し待ってみたいと思います。
投稿日時 - 2002-01-23 11:07:28
  • 回答No.2
レベル14

ベストアンサー率 47% (11786/24626)

この場合 int flgをグローバルで取っている限りだめで静的に static int flgなどにしないとやはりだめですね。 グローバルで取った場合それぞれのプロセスが独自のエリアを使ってしまうために他のプロセスでそれを反映させることが出来ないんです。 forkを使った段階でプロセスは自分自身のコピーを作り出しますのメモリ領域もコピーされる段階での物は使えますが動的に取ったものでは他のプロセ ...続きを読む
この場合
int flgをグローバルで取っている限りだめで静的に
static int flgなどにしないとやはりだめですね。
グローバルで取った場合それぞれのプロセスが独自のエリアを使ってしまうために他のプロセスでそれを反映させることが出来ないんです。

forkを使った段階でプロセスは自分自身のコピーを作り出しますのメモリ領域もコピーされる段階での物は使えますが動的に取ったものでは他のプロセスには反映されません。逆にそれが助かる場合もあるんですがね。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ