No.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 の間で双方向の通信路(パイプライン)を張ってデータを受け渡すことも可能ですが、上の例に比べるとかなり複雑になります。
No.1
- 回答日時:
Perl は、よく知らないんですが、知っている範囲で。
Perl のモジュールのうち、幾つかは C で書かれています。多分、拡張モジュールと
呼ばれていると思います。
つまり、拡張モジュールを C で書けば、Perl の方からは、モジュールとしか見えません。
ただ、これには、そのための知識が必要になります。質問が出てきた背景を察するに
C を経験した開発メンバーは多数居るが、Perl を扱える開発メンバーが余り居ない、
というところから出てきた質問のように思えます。
「制御コマンドの発行」というのは socket 経由でどこかに通信ということでしょうか?
素直に Perl を教え込むのが一番の近道だと思います。
もしくは、C で実装したいことを、なるべく少ない種類のインターフェースで共通化
して、ある人間だけがその作業に特化する方法もあるでしょう。
# 苦労の割には、報われない気がします
この回答へのお礼
お礼日時:2001/11/29 22:35
UDPのsocketなんですが、Perlでやろうと格闘して諦めました(笑)。結局、Cで書いたものに引数として渡し、標準入力から戻ってきたものを利用しようと思います。アドバイスありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl perlでリテラル値はメモリにどのように格納されているか? 1 2023/01/15 20:45
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
- Perl perlをバージョンアップしたら、今まで正常に動いていたプログラムが、エラーになってしまった 3 2022/10/05 15:44
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
- JavaScript JAVASCRIPT 2 2022/04/15 15:10
- Perl Windows10においての『Perl』のプログラムについて 1 2022/05/09 16:04
- Perl perlプログラミング 空白行削除 4 2023/01/28 17:58
- Perl perlについての質問 1 2022/10/01 15:38
- CGI CGIで出力するhtmlの<!DOCTYPE html>等のタグは要りますか? 2 2023/02/05 21:26
- その他(開発・運用・管理) ユーザ権限でソフトを起動すると必ず管理者パスワードをきかれてうまく利用できない 3 2022/05/10 00:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IISでエラー、Apachでは動くの...
-
CGIって何ですか?簡潔に教えて...
-
ホームページにCGIを設置したの...
-
EXCELファイルに誰がアクセスし...
-
URLに~/cgi-bin/~を隠す方法
-
CGIの設置が分かりません・・・
-
midi・・・要はhpでbgm鳴...
-
直リンク用バナーの作り方
-
ASPから既存のexcelブックを開...
-
ローカルマシンでCGIソースが出...
-
《エクセルVBA》「他の人が該当...
-
SFTPなどは使わないホームペー...
-
メールフォームのCGIでデータが...
-
cgi アクセス制限 エラー
-
通貨表示で3桁毎にカンマ(?)を...
-
リダイレクト機能
-
perlからJavascriptを起動
-
掲示板のスレッドが消えた!?
-
CGIでコードがむきだしの状態で...
-
SSIまで編集時にイメージどおり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CGIって何ですか?簡潔に教えて...
-
Perlプログラム上でアラートを表示
-
Webからアクセスし、画面のボタ...
-
IISでエラー、Apachでは動くの...
-
実行可能な外部コマンドは?
-
IIS5.1でCGI Timeoutになる原因...
-
ホームページにCGIを設置したの...
-
CGIファイルへのブラウザからの...
-
CGI経由で起動したプロセスが停...
-
毎日同時刻に、設定しておいた...
-
前回はごめんなさい。pythonでc...
-
cgi を定期的に自動実行
-
CGIからのプログラム起動
-
cgiで呼び出したプログラムを数...
-
ログアウト処理でWebブラウザを...
-
EXCELファイルに誰がアクセスし...
-
《エクセルVBA》「他の人が該当...
-
SFTPなどは使わないホームペー...
-
VBAでサーバーにアクセスするに...
-
URLに~/cgi-bin/~を隠す方法
おすすめ情報