質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

7133閲覧

C言語とPHPの連携

shanso

総合スコア14

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/12/02 02:39

現在、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のリソースがありませんと表示されます
なにが間違っているのかご指摘のほどお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

次の原因が考えられると思います。

  1. 設定が正しくされているか
2 => array("file", "/tmp/error-output.txt ", "a") // はファイルで、そこに書き込みます。 ... $a_exe = 'C言語の実行ファイルのある場所(完全パス)';

2.$a_exeは、a.exeなどのコンパイル後のファイルになっているか
3. error-output.txtに書き込み権限はあるか

投稿2015/12/02 02:47

ymknjugg

総合スコア131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問