gibt es eine Möglichkeit ein Programm welches auf meinem Rechner
installiert in C zu "callen"?
so in der art:
Kommandozeile("mkdir xyz.lol");
Ich hab gegoogled, aber nix gefunden...
Gast
#2047022
http://en.wikipedia.org/wiki/System_%28C_standard_library%29 Die englische Wikipedia ist durchaus brauchbar wenn man eine Übersicht über die Funktionen der C-Standardlibrary haben will.
Oder da: http://cplusplus.com/reference/
Die andere Möglichkeit ist, herauszufinden, welches Betriebssystem man verwendet und die zum Starten anderer Prozesse gedachten Betriebssystemaufrufe zu verwenden. Unter Windows gibt es z.b. die Win32-API-Funktion CreateProcess.
Gast
#2047284
Rufus Τ. Firefly schrieb: > Unter Windows gibt es z.b. die Win32-API-Funktion CreateProcess. Guck dir mal die Parameter davon an, das tue ich mir nicht an wenn nicht unbedingt nötig. Für "dir", "mkdir" und Co. ist system() völlig ausreichend. Wie es unter Linux aussieht weiß ich nicht. http://msdn.microsoft.com/en-us/library/ms682425%28v%3Dvs.85%29.aspx
Gast
#2047297
Wenn ich mich richtig erinnere heisst das auch unter Linux system(). Gast
Gast
#2047302
nm vv schrieb: > Wenn ich mich richtig erinnere heisst das auch unter Linux system(). > > Gast Der C-Befehl natürlich, gehört zur Standardlibrary. Die API-Funktion wird wohl anders heißen.
Gast
#2047305
Der C-Befehl wird wohl reichen fuer AVR-Dude. Gast
Gast
#2047309
man fork man exec
()(()))()((() schrieb: >> Unter Windows gibt es z.b. die Win32-API-Funktion CreateProcess. > > Guck dir mal die Parameter davon an, das tue ich mir nicht an wenn nicht > unbedingt nötig. Die Parameter muss man nicht unbedingt alle nutzen, aber man hat auch mehr Freiheitsgrade als bei "system", so kann man das Arbeitsverzeichnis frei angeben, was in manchen Situationen nicht unwichtig ist. Auch kann man ein Handle auf den erzeugten Prozess erhalten, mit dem man beispielsweise feststellen kann, wann er sich beendet hat.
Gast
#2047381
@Rufus Ich schrieb ja, wenn es nötig ist nimmt man CreateProcess(), für einfache Sachen muss man sich aber nicht das Leben schwer machen. Keep it simple and stupid. :-)
Gast
#2047738
fork() und exec() bieten bei weiten mehr Freiheitsgrade als CreateProcess().
Gast
#2047752
STOP! fork hat noch nicht einmal ansatzweise die erwünschte Funktionalität. pid_t fork(void); Description fork() creates a child process that differs from the parent process only in its PID and PPID, and in the fact that resource utilizations are set to 0. File locks and pending signals are not inherited. Was der TO ist ein einfaches int system(const char *command); Description system() executes a command specified in command by calling /bin/sh -c command, and returns after the command has been completed. During execution of the command, SIGCHLD will be blocked, and SIGINT and SIGQUIT will be ignored.
Gast
#2048465
Eine kleinere Paramaterleiste bedeutet nicht unbedingt weniger Flexibilität oder Leistung.
Gast
#2048593
()(()))()((() schrieb: > Rufus Τ. Firefly schrieb: >> Unter Windows gibt es z.b. die Win32-API-Funktion CreateProcess. > > Guck dir mal die Parameter davon an, das tue ich mir nicht an wenn nicht > unbedingt nötig. Für "dir", "mkdir" und Co. ist system() völlig > ausreichend. Man muß sich halt über die potenziellen Sicherheitsprobleme bewußt sein, sofern die für das gewünschte Programm eine Rolle spielen. Norbert schrieb: > STOP! > > fork hat noch nicht einmal ansatzweise die erwünschte Funktionalität. Deshalb stand da ja auch nicht "fork()" sondern "fork() und exec()". Beides zusammen hat sehr wohl die erwünschte Funktionalität.
Gast
#2048623
Aha... und ich dachte der TO wollte: >> gibt es eine Möglichkeit ein Programm welches >> auf meinem Rechner installiert in C zu "callen"? >> so in der art: >> Kommandozeile("mkdir xyz.lol"); also so etwas wie: system("mkdir xyz.lol"); nämlich einen Aufruf eines externen Programms und nach Beendigung soll sein Programm weiterlaufen. Da hab' ich ihn bestimmt völlig falsch verstanden... In Wirklichkeit möchte er sein Programm also forken, sich mit PID und PPID herumschlagen, im geforkten Teil mit exec(l/lp/le/v/vp) das externe Programm aufrufen, die PID auf Beendigung prüfen und diese Info an sein Hauptteil übermitteln um dort mit der Programmausführung weiterzumachen. Geht natürlich auch!
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.