frage zu einer system funktion...



  • hi,

    ich hab in meinem Programm folgenden code:

    ...
    ...
    system("set os=WinNT_test");
    ...
    ...
    ...
    

    weis jemand von euch wieso er das nicht macht? ich meine er bringt mir keinen fehler aber er schreibt die umgebungsvariable auch nicht um!



  • Wer bringt dir keinen Fehler? Der Compiler? Sicher nicht, aber was gibt denn die Funktion zurück?

    MSDN Library schrieb:

    If command is NULL and the command interpreter is found, the function returns a nonzero value. If the command interpreter is not found, it returns 0 and sets errno to ENOENT. If command is not NULL, system returns the value that is returned by the command interpreter. It returns the value 0 only if the command interpreter returns the value 0. A return value of – 1 indicates an error, and errno is set to one of the following values:

    E2BIG
    Argument list (which is system-dependent) is too big.

    ENOENT
    Command interpreter cannot be found.

    ENOEXEC
    Command-interpreter file has invalid format and is not executable.

    ENOMEM
    Not enough memory is available to execute command; or available memory has been corrupted; or invalid block exists, indicating that process making call was not allocated properly.



  • ja der compiler bringt mir keine fehler! Die funktion ööfnet ja einfach eine dos konsole inder sie den inhalt von system() ausführt...und das wäre ja in meinem fall: set os=... !?



  • Hallo,

    system ist denkbar schlecht, und erst recht nicht dafür zu gebrauchen, eine Umgebungs-Variable zu setzen. Warum? Der einfache system-Aufruf startet den Kommando-Prozessor als neuen Prozeß, für diesen Prozeß wird dann zwar die Umgebungs-Variable tatsächlich gesetzt (hinzugefügt zu den schon vorhandenen Umgebungs-Variablen für diesen Prozeß), aber dann ist der system-Aufruf abgeschlossen, der Kommando-Prozessor und damit der Prozeß, der ihn gestartet hat, wird beendet, und die dort gesetzte Umgebungs-Variable existiert nicht mehr für andere Prozesse.

    Jeder einzelne Aufruf eines Konsolen-Fensters (Eingabe-Aufforderung) ist wieder ein einzelner, getrennter Prozeß, der nichts mit anderen geöffneten Konsolen-Fenstern zu tun hat. D.h., du kannst erst einmal nicht in einem Konsolen-Fenster ein Set ausführen, und dann ein weiteres öffnen, und dann dort Set eingeben, und dann ist die Variable dort zu sehen. Das ist nicht der Fall, weil wie oben gesagt, jeder Kommando-Prozessor seinen eigenen Satz von Umgebungs-Variablen vom System bekommt. Solltest du versucht haben, diese System-Variablen zu setzen (die man also bei z.B. XP/NT unter "Arbeitsplatz"->"Eigenschaften" findet), dann mußt du ganz anders vorgehen, die stehen nämlich in der Registry, wo man sie findet, und wie man genau vorgeht, steht hier:

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/environment_variables.asp

    MfG


Anmelden zum Antworten