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...
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.
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.
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
Wenn ich mich richtig erinnere heisst das auch unter Linux system(). Gast
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.
()(()))()((() 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.
@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. :-)
fork() und exec() bieten bei weiten mehr Freiheitsgrade als CreateProcess().
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.
Eine kleinere Paramaterleiste bedeutet nicht unbedingt weniger Flexibilität oder Leistung.
()(()))()((() 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.
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!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.