複数のマシン(Solaris8)からの情報を1台のマシン(Solaris8)で収集する
プログラムを作成したいのですが、rshではセキュリティの関係上使用出来ません。
そこでプロセス間通信を利用したいと考えております。
まず、複数のマシン上に情報収集用のプログラムを置いておき、1台のマシンから
パラレルにキックをかけて情報収集が出来ないものかお教え下さい。
名前は知っているのですが、方法がわかりません。
この様にすれば可能ですよとか、事例紹介ページ、規正の製品が有ればお教え下
さい。

よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

あなたが知りたい内容はだいたい分かった気がします。



悪いことは言いませんから、まずは、測定プログラムを CGI として実装することを
薦めます。

馬鹿みたいに大きなプログラムじゃない限り、ディスクからのロードなんてたいした
オーバヘッドにはなりません。

まずは、CGI として実装してみて、それでも速度に不満があるようであれば、そこで
はじめて、そのCGI を、情報収集デーモンにすれば良いでしょう。


後々、プログラムを分離することを念頭において CGI をつくるなら、情報の収集と、
それの出力を別関数として実装しておくことが大事です。

CGI の main() がこんな感じになるように。

int main()
{
  収集内容 data;

  data = 情報収集関数(必要な引数);

  情報の出力(data, その他必要な引数);

  return 0;
}

後で、情報収集関数を別プロセスに移すときには、この関数がそのまま使えますし、
この部分がプロセス間通信になるだけですから。


★別プロセスに情報収集を分離したときの CGI

int main()
{
  収集内容 data;

  収集プロセスの起動取得(必要な引数);
  data = 収集を待って情報を取得関数(必要な引数);

  情報の出力(data, その他必要な引数);

  return 0;
}

★情報収集プロセスの main()

int main()
{
  デーモンになるための作法が幾つか…

  while(起動の待合わせ) {
    pid_t pid;
    if ((pid = fork()) == 0) {
      収集内容 data;
      data = 情報収集関数(必要な引数);
      CGIへ収集情報を送信関数(data);
      return 0;
    }
  }

  return 0;
}

という感じになります。

データの待ち合わせをして、ある程度の情報をやり取りする場合のプロセス間通信には
メッセージキューが向いてます。msgget(), msgsnd(), msgrcv() といったシステム
コールを使います。


> 基礎が全くわかっておりません。簡単な例で結構ですのでお教え下さい。
> 本来であれば、この程度の人間がご質問すること自体間違っていることは
> 承知しております。

ここは、分からない人が質問するサイトですから、質問すること自体は間違ってない
んですが、それなりに書くことがあるので、「簡単な例」といわれても書くのが
面倒なんです (^^;
    • good
    • 0
この回答へのお礼

どうも有難う御座いました。大変参考になりました。
又、質問した時にはお助け下さい。<-すぐ質問してしまうかも知れませんが。

お礼日時:2001/12/13 18:12

client は WEB ブラウザなんですか?



> 応答性も考慮する必要があります。このプログラムを常駐させておくとした
> 場合、どのような方法があるのでしようか。

だから、質問に「プロセス間通信」と題をうったのですね。
ディスクからのロードが待てないくらい大きなプログラムなんですか?

ひとつの方法は、プログラムを /tmp や /var/tmp のようなメモリファイルシステム
に配置しておくことですね。

もうひとつは、CGI と daemon になって待ち構えている測定プログラムで
プロセス間通信をすることですね。

# これを聞きたかったのかな?

具体的に何が分からないんでしょう?

・デーモンの作り方が分からない
・プロセス間通信というものが分からない
・プロセス間通信の種類くらいは知っているが、実際にプログラムを組んだことがない


> このプログラムも複数の管理端末から同時にアクセスされる可能性もあり

アクセスが有るたびに、fork() で、測定プログラムの子プロセスを起こせば良い
だけの話だと思うんですが…

この回答への補足

お返事有難うございます。

>もうひとつは、CGI と daemon になって待ち構えている測定プログラムで
>プロセス間通信をすることですね。
その通りです。ご説明の仕方が悪く申し訳ありませんでした。

>・デーモンの作り方が分からない
>・プロセス間通信というものが分からない
>アクセスが有るたびに、fork() で、測定プログラムの子プロセスを起こせば良いだけの話だと思うんですが…

基礎が全くわかっておりません。簡単な例で結構ですのでお教え下さい。
本来であれば、この程度の人間がご質問すること自体間違っていることは
承知しております。

よろしくお願い致します。

補足日時:2001/12/13 14:41
    • good
    • 0

> まず、複数のマシン上に情報収集用のプログラムを置いておき、1台のマシンから


> パラレルにキックをかけて情報収集が出来ないものかお教え下さい。

socket 通信のように、情報収集する側でプログラムを立ち上げておきたくない、と
いうことなのでしょうか?

情報を集める複数のマシンに何が入っているのか知りませんが、HTTP で CGI を
起動する、というのでは駄目ですか?

あと、

> rshではセキュリティの関係上使用出来ません。

が、どこまでを問題にしているか、によりますが ssh を使う、という手もありますね(→参考URL)。

参考URL:http://www-ccce.kek.jp/People/yashiro/Rep.euc/KE …

この回答への補足

早速のお返事有難うござます。

おっしゃる通りのことを実現したいのです。

Web画面(管理端末)から、対象となるホスト(複数の場合有り)を指定し
サブミットすることにより、対象となるホストに置いてあるプログラム
(情報収集用)を起動させ、結果を管理端末画面に表示するというものです。
このプログラムも複数の管理端末から同時にアクセスされる可能性もあり
応答性も考慮する必要があります。このプログラムを常駐させておくとした
場合、どのような方法があるのでしようか。

よろしくお願い致します。

補足日時:2001/12/13 12:46
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q電子書籍 リーダーは毎月 通信料が要るのか

携帯電話などの通信料にまいいっています。電子書籍リーダー購入を思案していますが、通信料がっかってはたまりません。 どうなんでしょう?

Aベストアンサー

電子書籍リーダーには3G(携帯電話)回線で書籍を購入できるものもありますが、そういったものも含めて、パソコンとのUSB接続や無線LANでも書籍を購入できます。
なのでご自宅にインターネットの環境があれば、特別な通信料をかけずに書籍を購入できます。
3G(携帯電話)回線を契約する必要はありません。

QSolarisのプログラムをWindows環境でコンパイル

Solaris環境でコンパイルを指定された、c言語で書かれたプログラムを
Windows環境でコンパイル・実行するにはどうしたらよろしいでしょうか?
仮想マシン以外でありましたらよろしくお願いします。

makefile
CC = gcc -g

all: s

s : s.o t.o
s.o : s.c t.h
t.o : t.c t.h

clean:
-rm s *.o out? core*

Aベストアンサー

WindowsにCygwinをインストールするという方法もあります。
ただし、MinGWにしてもCygwinにしても、Solaris固有の機能を使っているプログラムには対応できません。プログラムを一部書き換えれば対応できる場合もありますし、根本的に設計から見直さなければいけない場合もあります。

参考URL:http://ja.wikipedia.org/wiki/MinGW, http://ja.wikipedia.org/wiki/Cygwin

Q雑誌、新聞のネット版の代金は通信費?新聞書籍代?

仕事に必要な新聞書籍を購入しています。インターネットも利用しています。
新聞は新聞購読料、雑誌は書籍代、インターネット利用料は通信費として仕訳しています。

iPadを買って、いつも持ち歩くようになったので、新聞書籍のネット版を購入しようと思っています。
自分の地方では販売していないような地方の新聞も購入でき、またネット版だと少々料金が安くなるので魅力的ですね。

ところでこういった新聞・雑誌のネット版を購入した場合は、仕訳はどうするのが正しいでしょうか?
ネットを利用して読むのだから通信費?
それとも発行元が新聞社や雑誌社なのだから、今まで通り、新聞購読料や書籍代とする?

詳しい方教えてください。

Aベストアンサー

新聞購読料や書籍代です。

通信費は、それらを読むのに掛かった費用です。

QHP-UXのプログラムをSolaris、RHELへ

有識者の方々のお知恵を拝借させて頂きたく、宜しくお願いいたします。

HP-UX上のプログラムがANSI/Cで作成されています。
それをSolaris、RHELに移行する互換コンパイラはあるのでしょうか。
もしくは移行するための代替策があれば、実際に行ったことのある方の知見をお教え頂ければ幸いです。
HP-UX上でSolaris、RHEL移行用にコンパイルをするという手立てがあるなら、そうした手もありかと思っています。

尚、当方では、Solaris、RHEL→HP-UXはHPを探し、日立やIBMでは移行サービスがあること、非互換検出ツールがあることは知り得ています。

Aベストアンサー

> HP-UX上のプログラムがANSI/Cで作成されています。
> それをSolaris、RHELに移行する互換コンパイラはあるのでしょうか。

本当にANSI/Cで書かれているソースコードなら多くのCコンパイラで再構築すれば使えると思いますよ。
SolarisやRHELならPOSIXまでならANSI/C以外でも互換性あるでしょうし。
HP固有のライブラリ関数使ってたりすれば、その部分で移植作業が必要な場合も考えられますが。


今時ANSI/Cに対応してないCコンパイラなんてほぼないですよ。
ANSI/Cは最も標準的なC言語の規格で、非常に多く(最近のコンパイラでは対応してないコンパイラを知らない)のCコンパイラで利用できますよ。

※昔(ANSI規格以前)は標準的なK&R以外にも色々な方言がありました。WhiteSmithの様にK&Rと互換とした場合の権利的な心配からわざわざ標準とされるK&Rと関数名変えたりしてるCコンパイラすらありましたから。

ANSI C89/ISO C90は1989年・1990年に規格が発行された古い仕様なので、標準では改訂されたISO C99へ対応しているコンパイラもあります。(例えばGCCは標準ではC99。オプションを指定すればC89で使うことができます)

> HP-UX上のプログラムがANSI/Cで作成されています。
> それをSolaris、RHELに移行する互換コンパイラはあるのでしょうか。

本当にANSI/Cで書かれているソースコードなら多くのCコンパイラで再構築すれば使えると思いますよ。
SolarisやRHELならPOSIXまでならANSI/C以外でも互換性あるでしょうし。
HP固有のライブラリ関数使ってたりすれば、その部分で移植作業が必要な場合も考えられますが。


今時ANSI/Cに対応してないCコンパイラなんてほぼないですよ。
ANSI/Cは最も標準的なC言語の規格で、非常に多く(最近...続きを読む

QTOEICの勉強は通信講座か一般書籍か

TOEICの勉強は通信講座か一般書籍か

現在大学3年の者です。
通学時間を利用してTOEICの勉強をしようと思っているのですが、ユーキャンなどの通信講座を使うか本屋に売ってる本を買ってやるか悩んでいます。

もちろん一番大事なのは自分のやる気だと思いますが、通信講座の場合はかなり費用がかかるのでそれだけの価値があるのか疑問を持ちました。

皆さんはどちらがいいと思いますか?

Aベストアンサー

私は今の英語力を測ったり、英語勉強した成果(TOEICの勉強の成果じゃありません)を測るために受けているので、TOEIC限定の特別な勉強というのはしていないです。市販本を使っています。

市販本か通信教育かは、どっちでもいいと思いますよ。個人的には、通信教育が必須とは思いません。
TOEICは基本的な文法がそこそこ分かって、聴けて読めればいいです。
聴いて読む練習を日々続けて、少しTOEIC的な文法問題の勉強をすればいいですよ。

新公式問題集は持ってますか。Vol.4かVol.3あたりを買うと良いです。アマゾンのカスタマーレビューを読んでみるとどういう本か参考になります。

以下は公式サイトの学習アドバイス。

参考URL:http://www.toeic.or.jp/square/advice/

QopenFrameworks-複数台Arduino間のシリアル通信

openFrameworks-複数台Arduino間のシリアル通信

皆様,初めまして.

私は現在,複数台のArduinoとopenFrameworksとでシリアル通信を実現しようとしていますが,
そこで一つ問題が生じました.

シリアル通信に関してはofSerialクラスを利用しようと考えていましたが,下記の例のように,
ofSerialクラスのインスタンスを複数作ろうとしただけで,プログラム実行のどこかでエラーが出てしまいます.

(例)
class testApp : public ofBaseApp{

ofSerialserialA;
ofSerialserialB;
}

openFrameworksのHPを観ると,ofSerialクラスのドキュメントには
”the ofSerial class can attempt to communicate with the first available device it finds.”
とありますが,これはofSerialクラスでは一つのデバイスとしかシリアル通信が出来ない,
という意味なのでしょうか?
また,もしそうならば,openFrameworks上から複数台のシリアルデバイスと通信する方法はあるのでしょうか?

プログラミング初心者で誠に恐縮ですが,皆様のお力をお借りしたく思います.
よろしくお願いいたします.

openFrameworks-複数台Arduino間のシリアル通信

皆様,初めまして.

私は現在,複数台のArduinoとopenFrameworksとでシリアル通信を実現しようとしていますが,
そこで一つ問題が生じました.

シリアル通信に関してはofSerialクラスを利用しようと考えていましたが,下記の例のように,
ofSerialクラスのインスタンスを複数作ろうとしただけで,プログラム実行のどこかでエラーが出てしまいます.

(例)
class testApp : public ofBaseApp{

ofSerialserialA;
ofSerialserialB;
}

openFrameworksのHPを観る...続きを読む

Aベストアンサー

>これを実行すると
>ofSerial: listing devices (0 total)
>という結果になってしまいます.これは,Arduinoを何台接続しても代わらない状況です.

こちらについてだけ…

>VisualStudio2008 ExpressEdition
とのことですが、プロジェクトの文字セットは何になっていますか?
of_preRelease_v0061_vs2008_FAT.zipを展開してみましたがUNICODEでは正しく動作しません。
# ofSerial::enumerateWin32Ports()でコールしているSetupDiGetDeviceRegistryProperty()がUNICODEで返却してきて、その後のstrstr()で正しく検索できない。

上記のデバイス列挙で失敗して、ofSerial:setup()も正しく動作していない。
という可能性はありませんか?

Qボールペン字、学ぶなら書籍と通信講座どちらが?

同じような質問がすでにあったらすみません。

ボールペン字、とくに名前、住所、履歴書がきれいに書けるようになりたいのですが、通信講座は高くて気が引けるし、書籍だと人それぞれ違う名前、住所、履歴書といったものがうまく書けるようになるのか疑問です。

どの方法で学ぶのがいいでしょうか。

よろしくお願いします。

Aベストアンサー

やる気になればどちらでもできるので、高くないほうが良くないですか?

DSにもありますよ。
書籍とDS両方持っていますが、DSは思うように進ませてもらえないので、こつこつできなくて、書籍の方がやり易かったです。

基礎からやれば、違う名前でも大丈夫だと思います。

字本来の形からも、学ぶので、どんな字でも共通で上達すると思いますよ。

ただ、教室に通うのと違って、空いている時間に自分のペースでやるので、ついついさぼり気味になってしまいますね。

いつも目に付く場所に、意識的に置いておいたり、カレンダーにやった日を記しておくと、プレッシャーがかかって良いかもしれないです。

誰かとやると一番いいですけど。

Q複数プログラムから同一のSRAM領域にアクセス

お世話になります。

[Prog1.c]、[Prog2.c]の2つのプログラムから同じSRAM領域にread/writeを
するプログラムを考えています。
プログラム言語はC言語、OSはLinuxです。

・[Prog1]
 一定周期でSRAM領域を読み込むプログラム。
 SRAM領域のデータに変化があったときにある処理を実行する。
/*********************************************************/
int desc = 0;
char old_ch[256];
char new_ch[256];
for(;;) {
desc = fopen("/dev/rasram", O_RONLY);
read(desc, &new_ch[0], 256);
if(strcmp(old_ch, new_ch)) {

//処理を実行・・・

strcpy(old_ch, new_ch);//古いデータを更新
}
close(desc);
sleep(5);
}
/*********************************************************/

・[Prog2]
 任意のタイミングでSRAM領域にデータを書き込むプログラム。
/*********************************************************/
int desc = 0;
char write_ch[256];

desc = fopen("/dev/rasram", O_WONLY);
write(desc, &write_ch[0], 256);
close(desc);
/*********************************************************/

この時心配なのが、Prog1のreadとProg2writeが同時に発生した場合、プログラムエラー
にならないかということです。
openの状態がわかればいいのですが、別プロセスなのでdescの値も別になるでしょうし。
今までこのようなプログラムを作成したことのある方はいますでしょうか?

お世話になります。

[Prog1.c]、[Prog2.c]の2つのプログラムから同じSRAM領域にread/writeを
するプログラムを考えています。
プログラム言語はC言語、OSはLinuxです。

・[Prog1]
 一定周期でSRAM領域を読み込むプログラム。
 SRAM領域のデータに変化があったときにある処理を実行する。
/*********************************************************/
int desc = 0;
char old_ch[256];
char new_ch[256];
for(;;) {
desc = fopen("/dev/rasram", O_RONLY);
read(desc, &new_ch[0], 256);
if(strcmp(old_ch, ...続きを読む

Aベストアンサー

ANo.2さんの回答の排他制御が普通だと思いますが、逆の両方で使うモードもありますので調べてみてください。

shared mode のオープンで私が知っているのは _fsopen() ですが(だったと思いますが、間違いかも)、お使いのC/C++でサポートされているか調べてみてください。

QCanon C2030FとMac OS Lion

Mac OS Lion (10.7.3)でC2030fをUSBでつなぎ印刷機能をしようしたいと考えております。[システム環境のプリンタ]→[ドライバ]から[使用するドライバ(C2030f)を選択]までできるのですが、下のリストからC2030fのプリンタドライバを選択しようとしても表示されません。どうしたらよろしいでしょうか?

Aベストアンサー

Canon C2030F
 同じ機種を使っていますが・・・・ こういうネットできく前に

 Canonに直接聞く方が確実なのでは?
 または導入した業者経由でても 

Canon
 共通お客様センター  TEL 050-555-90056 (9~12 13~17))

Q複数のプログラムの同時実行ができないように制御したいのですが…

このたびゲームを製作しているのですが、ゲーム本体と設定プログラムを同時に起動できなくしたいのですが、やり方がわからず困っています。
はじめはファイルのアクセス権を利用してやろうとしたのですが、うまくいきませんでした。(片方のプログラムであるファイルを開いておき、もう片方のプログラムでファイルを開こうとするとエラーが発生するという感じです)

何かいい方法は無いでしょうか?教えていただけると助かります。
よろしくお願いいたいますm(_ _)m

Aベストアンサー

VC++.netでも普通に使えます。
VC++.netは単にフレームワークも使えるといえうだけで普通にAPIを呼ぶことも出来ます。
#1で提示したURLのソースでエラーがでるのは
elseの中括弧がないからとかじゃないですか?
後、
OpenMutexとCreateMutexの第3引数が一致してないとか
ちょっと不備があるサンプルでした。
正しくはこうです。

HANDLE hMutex;
hMutex = OpenMutex(MUTEX_ALL_ACCESS, false, "ApplicationName");
if( hMutex != 0 ) {
CloseHandle(hMutex);
return 1;
} else {
hMutex = CreateMutex( NULL, true, "ApplicationName");
}


>ミューテックスを作成したプログラムが何らかの形で強制終了してしまった場合、そのミューテックスは開放されるのでしょうか?
基本的に開放されます。


人気Q&Aランキング

おすすめ情報