私はPerlプログラムとCプログラムを持っています。私はPerlプログラムを実行し、Cプログラムの戻り値を取得したい。それを明確にするには:
Cプログラム(a.out)
int main()
{
printf("100");
return 100;
}
Perlプログラム:
print `ls`; #OK
print `a.out`; #No error but it does not print any output.
何か案は? ありがとう。
回答:
回答№1は2私はperlを知っていませんが、これは私のシステム上で動作しますので、保証はありません:
#!/usr/bin/perl
print "Running a.out nown";
$exitCode = system("./a.out");
print "a.out returned:n";
print $exitCode>>8; print "n";
何らかの理由で system()
返される値は8ビットで返されます(0は256になり、1は512 ... 7は1792などになります)。しかし、なぜそれを調べるのに気をつけませんでした。
回答№2の場合は1
あなたのCプログラムはキャリッジリターンを印刷していないので、ラインバッファリングに関する問題が発生している可能性があります。
代わりにこれを試してください:
printf("100n");
回答№3の場合は0
system()はあなたのCプログラムが返したものか、シグナルで終了したかを示すコードを返します。後でそうでないと仮定して、あなたはできる
$exitcode = system("a.out");
print "return code was ", $exitcode >> 8, "n";
出力をキャプチャする場合は、バックティックを使用することができ、コードは$?変数。
$output = `a.out`;
$exitcode = $?;
print "return code was ", $exitcode >> 8, "n";
print "output was:n", $output;
IPC :: Cmdのような、あなたが望むかもしれないいくつかの他の機能を持つモジュールを使いたいかもしれません。