-4

私のCGIスクリプト内:

system("/home/httpd/cgi-bin/hbplus/hbplus /home/httpd/html/pdb1wdk.ent");

print $?;

システム コマンドは、ファイル (例: pdb1wdk.ent) を に渡しますhbplus。これは、入力ファイルを処理して出力ファイルを生成する、C で記述された exe ファイルです。

このコマンドはコマンド プロンプトから完全に機能し、現在の作業ディレクトリにファイルを作成しますが、system.

また、Python スクリプトとシェル スクリプトから実行hbplusして、Perl CGI からこれらを呼び出してみましたが、これによりセグメンテーション エラーが発生します。

4

1 に答える 1

5

値 139 -- 0x8Bfor$?は、セグメンテーション違反 (SIGSEGV) が原因で失敗し、コア ダンプがあることを意味します。

私の推測では、あなたの C プログラムが CGI アカウントから実行されている場合、入力ファイルを開くために必要なパーミッションがなく、さらに、オープンの失敗を適切に処理しないため、無効なファイルハンドルで動作し続けるということです。 .

pdb1wdk.ent次のようなもので権限を変更します

chmod 744 pdb1wdk.ent

そして、症状が変化するかどうかを確認します。

hbplusこれが機能する場合は、ファイルを開く例外を適切に処理するように、戻って変更することを忘れないでください

于 2012-07-26T08:37:00.757 に答える