C言語関係掲示板

過去ログ

No.941 親プロセスで子プロセスの結果取得する方法

[戻る] [ホームページ]
No.11959

親プロセスで子プロセスの結果取得する方法
投稿者---えりな(2004/01/20 01:47:44)


常駐プログラムにて、検索する子プログラムを
system関数にて実行させようと思っているのですが
その検索結果件数を、どのように親プロセスに取得させればよいのか
わかりません。

初心者でまだまだわからないことだらけで、困ってしまいました。
よろしくお願いします。

No.11960

Re:親プロセスで子プロセスの結果取得する方法
投稿者---YuO(2004/01/20 02:08:38)


>常駐プログラムにて、検索する子プログラムを
>system関数にて実行させようと思っているのですが
>その検索結果件数を、どのように親プロセスに取得させればよいのか
>わかりません。

環境に依存します。
環境に関する情報を提示して下さい。
#そもそもCにプロセスという概念は存在しない。


No.11961

Re:親プロセスで子プロセスの結果取得する方法
投稿者---えりな(2004/01/20 02:55:15)


>環境に依存します。
>環境に関する情報を提示して下さい。
>#そもそもCにプロセスという概念は存在しない。

無知ですみません。
OSはSolarisです。


No.11964

Re:親プロセスで子プロセスの結果取得する方法
投稿者---おでん(2004/01/20 08:34:34)


>>環境に依存します。
>>環境に関する情報を提示して下さい。
>>#そもそもCにプロセスという概念は存在しない。
>
>無知ですみません。
>OSはSolarisです。

system() は,単にコマンドラインを指定して
コマンドプロセッサに渡す機能を持つだけです.
起動したプロセスの結果が欲しければ、fork()、exec()や
spawnl()とかを調べてみてください。
Solarisにもあると思いますが、
spawnl()・・・これがいちばん簡単だと思う。

No.11966

Re:親プロセスで子プロセスの結果取得する方法
投稿者---namani(2004/01/20 10:43:30)


Solarisにはspawn関係は無いっぽいですね。

>常駐プログラムにて、検索する子プログラムを
>system関数にて実行させようと思っているのですが
>その検索結果件数を、どのように親プロセスに取得させればよいのか
>わかりません。

結果を標準出力に出しているのなら、ですが。
system関数を使うなら、一時ファイルを使うしかないかな?
たとえば、
system("./childprog >& /tmp/.childtmp");
で、一時ファイルを読むとか・・・。
注意点は消し忘れとパーミッションですね。

一時ファイルを使いたくないのであれば、
popen〜pcloseでやってしまうのが簡単ですね。
具体的には、
FILE *pipe;
char buf[256];
pipe = popen("./childprog","r");
while(fgets(buf,256,pipe) != NULL);
pclose(pipe);


それか・・・fork、execでやるしかないですね。

No.11968

Re:親プロセスで子プロセスの結果取得する方法
投稿者---えりな(2004/01/20 11:49:46)


みなさま、ご返答ありがとうございます。
本当に助かります。

実は、最初にexec、forkで試していたのですが、
子プログラムに引数を渡すことができず、system関数にしておりました。
sprintfで(str,"./programname 引数(変数)")をいれ、system関数で
実行させていますが、execにする場合は、どのように引数を渡せばよいのでしょうか。

教えていただいた一時ファイル、popenはいただいた例のように
作ってみます。ありがとうございます。
こちらで実行できる場合は、このやり方にしたいと思うのですが
まだどうすればよいのか理解しきれておらず、すみません。

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