2

perl モジュール IPC::Run を学習しています。cpan doc を読んでいるときに、'<pipe'. 小さなプログラムを書きました。実行すると、常にハングします。

私が書いたコード:これはcpan docからの単なるコピーです。

local (*IN);
@cat = ('cat') 
$h = start \@cat, '<pipe', \*IN;
   print IN "hello world\n";
   pump $h;
   close IN;
   finish $h;

なぜハングするのですか?私はこれで何が欠けていますか?

感謝、


ご存知のように、さまざまな Lisp システムがあります。Common Lisp の回答を投稿します。

単純な方法は を使用すること(load "filename.lisp")ですが、しばらくするとうまく機能しません。したがって...

Common Lisp には、パッケージ化とファイル管理を処理する「ASDF」というライブラリがあります。ASDF のセットアップが少しあります。

  1. ASDF がファイルを探すディレクトリを作成します。
  2. この情報を私の Lisp システムの init ファイルに追加してください。

ファイルでこれを使用し.sbclrcます(〜で.asdfファイルを作成したと仮定します):

(pushnew "~/.asdf/" asdf:*central-registry* :test #'equal)

私は通常、以前にビルドした ASDF ファイルを使用してから、それを変更します。

サンプルの ASDF ファイルの内容は次のとおりです。

(asdf:defsystem #:cl-linq
  :depends-on ( #:alexandria #:anaphora)
  :components ((:file "cl-linq"))
  :name "cl-linq"
  :version "0.1"
  :maintainer "Paul Nathan"
  :author "Paul Nathan"
  :licence "LLGPL"
  :description "CL LINQ style interface with strains of SQL"
  :long-description
  "DSL for managing and querying datasets in a SQL/LINQ style
syntax. cl-linq provides a simple and usable set of primitives to
make data examination straightforward. ")

このコードをcl-linq.asdソース コード ( defsystemcl-linq.lisp のコンポーネントから) の隣のファイルに配置し、そのファイルをディレクトリにシンボリック リンクします。"cl-linq"cl-linq.asd~/.asdf/

私の cl-linq.lisp ファイル内にこれを含めます:

(defpackage :cl-linq
  (:use
   :common-lisp
   :anaphora)
  (:export
   #:query
   #:cl-linq-select))
(in-package :cl-linq)

あなたの場合、2つのコンポーネントがあります。それぞれが独自の defpackage フォームを持ち、他のパッケージが必要とする関数をエクスポートします。

例として、私のプロジェクトであるCL-LINQからコードを引用しました。テンプレートとして自由にお使いいただけます。

4

1 に答える 1

1

のドキュメントにpumpは、「何らかの入力を配信するか、何らかの出力を受信するまでブロックする」と書かれています。

pumpその例で呼び出すのは意味がありません。start届けるものは何も与えられず、start聞くように指示されませんでしたcat

その行を削除します。

于 2013-11-01T17:43:22.750 に答える