Forum: PC-Programmierung [GCC + Linux] anderes Programm (AVR-Dude) in C aufrufen.


von Max D. (Firma: No RISC, no fun.) (metalfan)


Lesenswert?

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...

von system (Gast)


Lesenswert?

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.

von Silvan K. (silvan) Benutzerseite


Lesenswert?


von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von ()(()))()((() (Gast)


Lesenswert?

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

von nm vv (Gast)


Lesenswert?

Wenn ich mich richtig erinnere heisst das auch unter Linux system().

Gast

von ()(()))()((() (Gast)


Lesenswert?

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.

von nm vv (Gast)


Lesenswert?

Der C-Befehl wird wohl reichen fuer AVR-Dude.

Gast

von Misst (Gast)


Lesenswert?

man fork
man exec

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

()(()))()((() 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.

von ()(()))()((() (Gast)


Lesenswert?

@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. :-)

von Das U (Gast)


Lesenswert?

fork() und exec() bieten bei weiten mehr Freiheitsgrade als 
CreateProcess().

von Norbert (Gast)


Lesenswert?

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.

von Das U (Gast)


Lesenswert?

Eine kleinere Paramaterleiste bedeutet nicht unbedingt weniger 
Flexibilität oder Leistung.

von Rolf Magnus (Gast)


Lesenswert?

()(()))()((() 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.

von Norbert (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.