Hallo Liste, habe ein kleines Programm gebastelt mit dem man ein Linux-System über eine Web-Oberfläche Konfigurieren kann (a la Webmin). Die Anbindung wird über CGI realisiert. Eine Funktion des Programms erlaubt es dem User unter anderem die IP Adresse des Gerätes zu ändern, was auch super funktioniert. Mein Problem ist, dass ich dem User vor Änderung der IP mitteilen möchte, dass eine entsprechende Änderung erfolgt. (Device is setting up IP ...) Trotzdem ich den HTML Code vor dem Ändern der IP generiere wird er nicht mehr dargestellt. Die Änderung der IP ist schneller und der Browser verliert somit die Verbindung zum Server vorzeitig (der Aufruf erfolgt über die Funktion system()). Habe versucht mit sleep() eine Verzögerung zu erreichen was leider nicht funktioniert. Sicher habe ich irgend etwas falsch gemacht, nur was? Bin noch Linux-Anfänger und auch nicht im Besitz großen Erfahrungen mit C, also bitte verzeiht die vielleicht simple Frage. Der Ablauf: Anfrage HTML->WebServer->Aufruf Config-Programm->: ... if ( gen_html_code_ip() == 1) { sleep(3); set_ipaddress(ip); return 1; } ... ->WebServer->Browser
Hi
Trotzdem ich den HTML Code vor dem Ändern der IP generiere wird er nicht mehr dargestellt. Die Änderung der IP ist schneller und der Browser verliert somit die Verbindung zum Server vorzeitig (der Aufruf erfolgt über die Funktion system()).
Habe versucht mit sleep() eine Verzögerung zu erreichen was leider nicht funktioniert. Sicher habe ich irgend etwas falsch gemacht, nur was? Bin noch Linux-Anfänger und auch nicht im Besitz großen Erfahrungen mit C, also bitte verzeiht die vielleicht simple Frage.
Ich vermute mal, dass Dein Webserver Deine Ausgaben sammelt und erst dann an den Browser zurueckschickt, wenn Dein Script beendet wurde. Und zu diesem Zeitpunkt ist die IP wohl in jedem Fall schon geaendert. Manche Server machen das so - ist vielleicht konfigurierbar. Eine Abhilfe weiss ich nicht. Ich haette ohnehin nicht gedacht, dass sich so etwas auf eine aktive Verbindung auswirkt. Die Frage waere dann: Wartet der Webserver darauf, dass Dein Prozess beendet wird, oder wartet er, dass der Ausgabestrom geschlossen wird. Wenn letzteres, dann hilft es vielleicht, wenn Du stdout (auch noch stderr und stdin?) manuell schliesst und erst dann die IP aenderst. Wenn das auch nicht hilft, dann kannst Du vielleicht einen neuen Prozess erzeugen und diesen das Aendern der IP ueberlassen. Bye -- | Bodo Kaelberer | http://www.webkind.de/ | http://www.mehr-demokratie-wagen.de/ ---- | Haben oder Nichts sein
Benenn dein Skript in nph-... um. Das nph- am Anfang bedeutet sofern ich mich recht erinnere "no process headers" und bedeutet schlicht und einfach, dass der Webserver nicht auf die Beendigung des Skriptes wartet, sondern sofort alles rausschickt, was das Skript ausgiebt. Allerdings musst du am Anfang dann eine Zeile "Content-type: text/html" mit darauffolgender Leerzeile ausgeben. In PHP gibt es übrigens die Funktion flush() um den Ausgabepuffer zu senden - evtl. hilft das. Helge.
-----Original Message----- From: Markus Langner [mailto:mlangner@teleconnect.de] Sent: Wednesday, March 05, 2003 1:50 PM To: suse-programming@suse.com Subject: Problem mit der Funktion sleep()
Hallo Liste,
habe ein kleines Programm gebastelt mit dem man ein Linux-System über eine
Web-Oberfläche Konfigurieren kann (a la Webmin). Die Anbindung wird über
CGI realisiert. Eine Funktion des Programms erlaubt es dem User unter anderem
die IP Adresse des Gerätes zu ändern, was auch super funktioniert. Mein Problem
ist, dass ich dem User vor Änderung der IP mitteilen möchte, dass eine entsprechende
Änderung erfolgt. (Device is setting up IP ...)
Trotzdem ich den HTML Code vor dem Ändern der IP generiere wird er nicht mehr
dargestellt. Die Änderung der IP ist schneller und der Browser verliert somit die
Verbindung zum Server vorzeitig (der Aufruf erfolgt über die Funktion system()).
Habe versucht mit sleep() eine Verzögerung zu erreichen was leider nicht funktioniert. Sicher
habe ich irgend etwas falsch gemacht, nur was? Bin noch Linux-Anfänger und auch
nicht im Besitz großen Erfahrungen mit C, also bitte verzeiht die vielleicht simple Frage.
Der Ablauf:
Anfrage HTML->WebServer->Aufruf Config-Programm->:
...
if ( gen_html_code_ip() == 1)
{
sleep(3);
set_ipaddress(ip);
return 1;
}
...
->WebServer->Browser
participants (3)
-
Bodo Kaelberer
-
Helge Jung (ECO-Logic)
-
Markus Langner