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

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

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

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

PHP

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

4663閲覧

共有メモリでC言語とPHPのプロセス間通信

zeetmaru

総合スコア11

C

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

PHP

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/09/20 00:49

Windows上でMATLAB/SimulinkのS-Function BuilderブロックでC言語、
XAMPP上でPHPを使って、
この二つ間で値を送受信したいです。

テキストファイルを介して送受信するシステムはできたのですが、
通信時間が遅い(気がする)のと、動作が重くなるので、
共有メモリを使用して、値を送受信したいと考えております。

PHPの方はできたのですが、
C言語のほうでは、includeファイルが見つかりませんのエラーがでます。
<sys/shm.h>と<sys/ipc.h>が。
調べると、UNIX系のC言語ならあると書いてあったのですが、
どうしてもWindowsのMATLAB/SimulinkのS-Function Builderブロックで行いたいです。

解決策はありませんでしょうか。

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

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

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

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

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

tonkun4os

2018/09/20 01:42

そもそも「MATLAB/Simulink」が「ミューテックス」又は「セマフォ」による排他制御に対応してますか?(そもそもこの書き込み判らなければ手を出さない方がー)
m.ts10806

2018/09/20 05:16

現在の状況が分かる情報(環境情報詳細・コード・実エラーメッセージ)がないので回答は得られにくいかと思います
guest

回答1

0

ベストアンサー

PHPの方はできたのですが

とおっしゃっているのは、PHP拡張の
shmop_open,shmop_read,shmop_close
を使って共有メモリをアクセスするコードを作ったのだと理解しました。

C言語のほうでは...エラーがでます。

とおっしゃっているのは、IPCのshmget(),shmat()を使ったコードを
作ったのだと思います。

windowsにはshmget(),shmat()はありませんので、その作り方だと
windowsでは動きません(コンパイルできません)で、
終わりなのですが、、

「ではPHPのphp_shmop.dllはどうしているのだろう」と気になったので
ちょっとphp_shmop.dllのソースコードを見てみました。

すると、
WinAPIのOpenFileMapping,CreateFileMapping,MapViewOfFileExを用いて
shmgetやshmat相当を自作していました。

ですので、PHPの方をそのままにし、
C言語の方をphp_shmop.dllのソースコードを参考にして
shmgetやshmatを作り、それを使うようにすれば目的のことができるかもしれません。

ただ、なかなか大変な作業になると思いますので、
他の方がおっしゃるように
あるべき他の通信方法を検討された方がよろしいかと思いました。

解決策になっていなかったらすみません。

追記ですが、

通信時間が遅い(気がする)のと、動作が重くなるので、

気がするのではなくてきちんと計測された方がよろしいです。
もちろんものによりますが、
ファイルできちんと作られて出来ているものを共有メモリに変えたからと言って
劇的に速くなるとは限りません。
例えば1秒間に数回数KBのやり取りとかなら、ほとんど変化ないと思いますよ。

投稿2018/09/20 06:57

編集2018/09/20 07:25
taka-saan

総合スコア665

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問