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

PerlとCで相互に通信をさせたい

  • 困ってます
  • 質問No.175046
  • 閲覧数54
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 88% (361/410)

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

こんなことってできますでしょうか。
system関数で、コマンドラインを呼び出すことはできるとは知っているのですが、引数を相互に渡せたら・・・と思うのですが・・・。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル12

ベストアンサー率 40% (237/589)

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 の間で双方向の通信路(パイプライン)を張ってデータを受け渡すことも可能ですが、上の例に比べるとかなり複雑になります。
お礼コメント
pythian

お礼率 88% (361/410)

こんなものまでopenできたんですね。さすがPerlです。これで試してみます、ありがとうございました。
投稿日時 - 2001-11-29 22:34:08
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

Perl は、よく知らないんですが、知っている範囲で。 Perl のモジュールのうち、幾つかは C で書かれています。多分、拡張モジュールと 呼ばれていると思います。 つまり、拡張モジュールを C で書けば、Perl の方からは、モジュールとしか見えません。 ただ、これには、そのための知識が必要になります。質問が出てきた背景を察するに C を経験した開発メンバーは多数居るが、Perl ...続きを読む
Perl は、よく知らないんですが、知っている範囲で。

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

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

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

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

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

# 苦労の割には、報われない気がします
お礼コメント
pythian

お礼率 88% (361/410)

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


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

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

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

特集


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

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ