クライアントサーバシステムによる制御システムを作っているのですが、HTMLの出力などユーザに接する主要な部分をPerlで書き、制御コマンドの発行などをCにやらせたいと考えています。そこで、例えばユーザの入力をPerlで受け、それをCに渡して実行させ、返って来た結果を再びPerlが受け取ってユーザに渡す。

こんなことってできますでしょうか。
system関数で、コマンドラインを呼び出すことはできるとは知っているのですが、引数を相互に渡せたら・・・と思うのですが・・・。

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

A 回答 (2件)

pythian さん、こんにちは。



> 例えばユーザの入力をPerlで受け、それをCに渡して実行させ、返って来た結果を再びPerlが受け取ってユーザに渡す。

いろいろなやり方がありますが、「ユーザの入力を C プログラムへの引数として渡す」ことを前提に、比較的簡単な方法として、以下のものはいかがでしょう。

例えば、Perl から ls コマンド(=C で書かれたプログラム)に引数としてオプションとパス名を渡し、得られた結果を1行ずつ読みとって Perl で処理することを考えます。
サンプルプログラムは、次のようになります。

  open(CMD, "/bin/ls -l /var/log |") or die("Error: $!\n");
  while (<CMD>) {
    print ">>> ", $_;
  }
  close(CMD);

一般論として、/bin/ls が C のプログラム、-l /var/log がそれに渡す引数と思って下さい。また、最後の“|”は、「このプログラムの出力結果を CMD を通じて読み出す」ことを指示しています。これがポイントです。

得られた結果は、while (<CMD>) により、1行ずつ読み出されてきます。
ここでは、単に左に >>> を付加して表示させているだけですが、この部分を工夫すれば、お望みの処理ができると思います。

Perl と C の間で双方向の通信路(パイプライン)を張ってデータを受け渡すことも可能ですが、上の例に比べるとかなり複雑になります。
    • good
    • 0
この回答へのお礼

こんなものまでopenできたんですね。さすがPerlです。これで試してみます、ありがとうございました。

お礼日時:2001/11/29 22:34

Perl は、よく知らないんですが、知っている範囲で。



Perl のモジュールのうち、幾つかは C で書かれています。多分、拡張モジュールと
呼ばれていると思います。

つまり、拡張モジュールを C で書けば、Perl の方からは、モジュールとしか見えません。

ただ、これには、そのための知識が必要になります。質問が出てきた背景を察するに
C を経験した開発メンバーは多数居るが、Perl を扱える開発メンバーが余り居ない、
というところから出てきた質問のように思えます。

「制御コマンドの発行」というのは socket 経由でどこかに通信ということでしょうか?
素直に Perl を教え込むのが一番の近道だと思います。

もしくは、C で実装したいことを、なるべく少ない種類のインターフェースで共通化
して、ある人間だけがその作業に特化する方法もあるでしょう。

# 苦労の割には、報われない気がします
    • good
    • 0
この回答へのお礼

UDPのsocketなんですが、Perlでやろうと格闘して諦めました(笑)。結局、Cで書いたものに引数として渡し、標準入力から戻ってきたものを利用しようと思います。アドバイスありがとうございました。

お礼日時:2001/11/29 22:35

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

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

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


おすすめ情報