C-Applikation aus laufendem Code neu starten

Gast #6398473
Lesenswert?

Mahlzeit,

wir sind gerade dabei eine Software, welche für ein Controller 
geschrieben wurde auf x86 umzuschreiben. Diese soll dann zum testen usw. 
genutzt werden.
Jetzt gibt es dort eine Funktion einen Reset zu machen.
Ist so etwas in Linux irgendwie möglich?
ich müsste ja quasi die main wieder aufrufen. Wobei dann ja noch alle 
variablen (statische) erhalten bleiben? Diese müssten ja natürlich auch 
zurückgesetzt werden.
Gibt es in Linux eine Funktion um eine C-Applikation neu zu starten (aus 
laufendem Code heraus)
Gast #6398498
Lesenswert?

> Program beenden (exit()) und die Programm-Ausführung von
> einem Script aus in eine Schleife einbetten

&

> Wobei dann ja noch alle variablen (statische) erhalten bleiben?

Wohl eher nicht.

Ganz primitiv:

main(){
  reset:

  ...
  ...
  ...
  goto reset;
  ...
}
Gast #6398532
Lesenswert?

Es fragt sich halt, wie viel davon beim Start neu initialisiert wird, 
und in wie fern das gleich wie beim Controller ist. Man könnte in der 
main ein setjmp, und als reset dann nen longjmp machen. Jenachdem kann 
man auch früher ansetzen: 
https://linux.die.net/man/1/ld#:~:text=-init=name

Inwieweit das nachher aber vergleichbar mit dem Controller ist, kann ich 
nicht sagen.
Gast #6398550
Lesenswert?

Eventuell stat argv[0] "/proc/self/exe" nehmen. Das sollte dann 
eigentlich selbst falls argv[0] anders gesetzt wird oder die Datei 
verschoben oder gelöscht wurde noch gehen. Durch ne neue Version 
ersetzen und die laden geht dann halt aber nicht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren