2010-11-24 10 views
2

あるプロセスから別のプロセスにcのデータ(例:int値)を渡す方法はありますか?cでプロセス間でデータをやりとりする方法は?

私の経験上、シグナルをあるプロセスから別のプロセスに送信することができます。しかし、その信号とともにいくつかの情報を別のプロセスに「アタッチ」する方法がないように見えます。

+0

どのプラットフォームですか? – birryree

+0

Linux(Ubuntu) – root

+3

シグナルにデータを付けることができない場合でも、シグナルを使用して、一度に1ビットずつ 'SIGUSR1'と' SIGUSR2'を介して送信することができます。;-) –

答えて

1

sigqueue関数を使用すると、シグナルとともに単一の整数またはポインタを渡すことができます(しかし、シグナルのターゲットが別のプロセスであればポインタは無意味です。異なるプロセスはアドレス空間を共有しないためです)。

いくつかの他の方法は、あなたが利用可能なさまざまなプロセス間通信メカニズムのいずれかを使用することができ、パイプ、共有メモリ(POSIXまたはSysVのスタイル)、ファイル、...

+2

...ソケット:-) –

1

です。

Googleを使用してください。あなたも参照できるようにhere

0

清潔で、ポータブルで、強力な方法はソケットを使用しています。

0

これを行うにはパイプを使用できます。パイプの主な目的は、異なるプロセス間でデータをやりとりすることです。

パイプは、プロセス間通信用にオペレーティングシステムによって提供される最も簡単なメカニズムです。パイプは、2つのプロセス間の通信バッファです.2つのディスクリプタがあり、1つはディスクリプタを別のディスクに書き込むためのものです。書込み及び読出し動作は、FIFO順(先入れ先出し)で行われる。

パイプには、名前のないパイプと名前付きパイプ(FIFOとも呼ばれます)の2種類があります。

  • パイプは、階層的に関連するプロセス(親プロセスと子プロセス)間の通信のみを許可します。
  • 名前付きパイプは、任意のプロセス間の通信を可能にします。特殊なファイルが

てファイル・システム内に作成されたあなたには、いくつかのサンプルコードは、ちょうどここに行く場合:http://pastebin.com/1W216nyN

-1

を私は確信して、私たちは、プロセス間でグローバル変数を使用することができないと思いますけど。誰かが試してみたら、私に知らせてください。 extern valriableを含むヘッダーを使用する場合、別のmain()でこれを使用できます。これは独立したプログラム(プロセス)です。実行する2つのmain()をリンクさせる必要があります。

+0

できませんプロセスは、メモリ空間が互いに分離されています。 'extern'句は、他のコンパイル単位(ソースファイル)から外部変数を宣言するために使用されます。
そして、2つのmain()関数を "リンク"することはできません。 – philant

関連する問題