Archiv verlassen und diese Seite im Standarddesign anzeigen : Variable von PHP nach C
Hallo!
Wie kann ich über ein PHP-Skript eine Variable in einem laufenden C-Programm ändern?
Wie ist es z.B. möglich, aus PHP einen Integer in eine bestimmte Speicheradresse zu schreiben, und diese dann mit C auszulesen?
Vielen Dank für Hilfe und Tipps!
shared memory, ich weiß allerdings nicht ob php das schon kann, ansonsten message queue. Suche einfach mal nach IPC oder inter process communication
Gruß Markus
jwebworks
03-03-2003, 09:38
phoku:
willst du eine Datenbank-Schnittstelle zum "Neverwinter Nights
Server" schreiben? :-D
Wenn Du geschafft hast, dich mit einem Programm zu verbinden,
kannst Du mir dann kurz umreissen wie Du es geschafft hast?
cu, stop.h
jwebworks:
ne, eigentlich nicht. wie kommst du darauf? ;)
Was ich eigentlich vorhab, ist meine Relaiskarte am Parallelport über das Internet zu steuern. So dass ich über das Internet Licht ein-/ausschalten, Fische füttern usw. kann:D
Das C-Programm hab ich mittels parapin schon realisiert, jetzt fehlt nur noch anbindung an C. Du bringst mich aber auf ne andere Lösung: Ich schreibe die Variable einfach in ne Datenbank, und lese die mit C aus... oder wird das zu systemlastig, wenn ich das stumpf in einer Schleife mache, damit es keine Verzögerungen gibt?
jwebworks
03-03-2003, 10:52
wie schnell soll das teil denn reagieren.
wenn du alle 5 sekunden nachschaust.
du kannst den auftrag ja auch in eine datei
schreiben und die auf änderungen hin
überwachen
cu, stop.h
ne, das soll nahezu in real-time geschehen.
per live-stream-webcam soll man das ganze beobachten können; und da wären verzögerungen ja ärgerlich.
und wenn du das C Programm einfach von PHP aus aufrufst mit den nötigen Argumenten, es muss ja nicht immer laufen..
wäre wohl ne möglichkeit, stellt aber nicht zufrieden.
damit wären dann nur recht einfache programme möglich.
wenn ich z.b. übers internet sage "drehe die cam auf position 240°" muss das programm ja wissen, wo die cam gerade steht, um dann die nötige drehung zu machen. dafür muss die alte position immer in einer variablen gespeichert werden (und das soll nicht in einem file o.ä. geschehen).
möglich wäre auch eine kommunikation über tcp/ip-sockets. Dein c-prog könnte als serverprozess agieren und auf den soketconnect von php aus reagieren. ich hab sowas zwischen php auf linux und vb auf win zu laufen...
da ich die relaiskarte sowiso irgendwann autonom im netzwerk mit eigenem kleinem rechner laufen lassen wollte, hört sich das sehr sehr interessant an!
kannst du mir dazu weitere quellen schicken?
Hi,
ich habe einen serverprocess auf einer win-maschine laufen, der mittels crysal reports reports in pdf erzeugt. mit dem kommuniziere ich so:
global $PDFPFAD;
global $REPPFAD;
global $CRSERVER;
#vars festlegen
$param=str_replace("*","=",$param);
$pdffile=$PDFPFAD.str_replace("/","\\",urldecode($pdffile));
$repfile=$REPPFAD.$repfile;
#soket öffnen
$rsvr=fsockopen($CRSERVER,"7588");
if(!$rsvr) {echo "Keine Verbindung zum Report-Server";}
else {
#daten an report-server senden
fputs($rsvr,"#RSTART#".$repfile."#".$pdffile."#".$param);
$data=fread($rsvr,4);
#auf ok warten für datenempfang
if ($data=="#OK#") {
#auf ok warten für jobende
$data=fread($rsvr,4);
}
#verbindung schliessen
fclose($rsvr);
}
und der Server ist ein VB Programm das auf dem port 7588 auf verbindung wartet.
geht auch noch einfacher:
Du erzeugst in deinem C-Programm einfach eine named pipe. Diese öffnest du im C-Programm lesend. Das PHP-Script muss dann nur diese Datei (daher named pipe) öfnnen, einen Befehl hineinschreiben und kann sie dann wieder löschen. Das Lesen in deinem C-Programm könnte blockierend sein.
Wie läßt sich das umsetzen?
Was ist eine "named pipe"?
ganz einfach ein beispiel:
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
int main(void)
{
FILE* file;
int befehl;
int argument;
if (mkfifo("/tmp/mypipe", I_RUSR|IWUSR) != 0){
perror("pipe konnte nicht erzeugt werden");
return 1;
}
file = fopen("/tmp/mypipe","r");
if (!file){
perror("pipe konnte nicht geöffnet werden");
return 1;
}
while (fscanf(file,"%d,%d", &befehl, &argument) == 2){
//befehl und argument auswerten
if (befehl == 100) break; //befehl zum beenden
}
fclose(file);
return 0;
}
Damit wird eine pipe als datei "/tmp/mypipe" angelegt und lesend geöffnet. Dein php-Script muss dann nur immer Befehle der Form "integer,integer\n" hineinschreiben. Man kann natürlich auch Befehle als Strings nehmen.
hm, ne datei anzulegen ist aber bestimmt nicht die eleganteste lösung, oder?
Original geschrieben von phoku
hm, ne datei anzulegen ist aber bestimmt nicht die eleganteste lösung, oder?
...und funxt nur wenn der client filezugriff hat...also schwierig über mehrere rechner zu verteilen.
Original geschrieben von msi
und wenn du das C Programm einfach von PHP aus aufrufst mit den nötigen Argumenten, es muss ja nicht immer laufen..
wie mache ich das? wie sieht der aufruf aus php aus?
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.