現在、PHPからC言語にパイプで文字列を与え
C言語からPHPへ返すといったものを作ろうとしています。
ネットで見つけてきたサンプルを元に試しているのですが
上手くいきません。
phpのソース
<?php $spec = array( 0=> array("pipe", "r"), // stdin は、子プロセスが読み込むパイプです。 1 => array("pipe", "w"), // stdout は、子プロセスが書き込むパイプです。 2 => array("file", "/tmp/error-output.txt ", "a") // はファイルで、そこに書き込みます。 ); $cwd=NULL; $env=NULL; // C言語で作成した実行プログラム. $a_exe = 'C言語の実行ファイルのある場所(完全パス)'; $process = proc_open($a_exe, $spec, $pipes, $cwd, $env); if (is_resource($process)) { // $pipes はこの時点で次のような形を取っています。 // 0 => 子プロセスの stdin に繋がれた書き込み可能なハンドル // 1 => 子プロセスの stdout に繋がれた読み込み可能なハンドル // すべてのエラー出力は /tmp/error-output.txt に書き込みされます。 // 以下にC言語側への入力を行う. fwrite($pipes[0], "いっくよー\n"); fwrite($pipes[0], "ファイヤー!\n"); fwrite($pipes[0], "ばよえ~ん!!\n"); fwrite($pipes[0], "\n"); // END mark. fclose($pipes[0]); // ここでC言語側からの返り値を取得する. echo stream_get_contents($pipes[1]); fclose($pipes[1]); // デッドロックを避けるため、proc_close を呼ぶ前に // すべてのパイプを閉じることが重要です。 $return_value = proc_close($process); echo "command returned $return_value\n"; } else { echo "リソースがありません"; } ?>C言語のソース
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE 1024
int main(){
char buf[ MAX_LINE ]; while(1){ fgets( buf, sizeof(buf), stdin ); buf[ strlen(buf) - 1 ] = '\0'; // 改行コードを消す fflush( stdin ); // バッファを超えた分は流す if( buf[0] == '\0' ){ // 入力が空だったら終了 break; } printf( "入力行は「 %s 」です。\n", buf ); } printf( "1.これでおしまいっ!\n" ); printf( "2.いっけ~~~~~っ\n" ); printf( "3.ズギャーン!!\n" ); return EXIT_SUCCESS ;
}
こちらを試してもelseのリソースがありませんと表示されます
なにが間違っているのかご指摘のほどお願いします
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。