www.mikrocontroller.net

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


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

Bewertung
0 lesenswert
nicht 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...

Autor: system (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Silvan König (silvan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ()(()))()((() (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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%2...

Autor: nm vv (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich mich richtig erinnere heisst das auch unter Linux system().

Gast

Autor: ()(()))()((() (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: nm vv (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der C-Befehl wird wohl reichen fuer AVR-Dude.

Gast

Autor: Misst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
man fork
man exec

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ()(()))()((() (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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. :-)

Autor: Das U (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
fork() und exec() bieten bei weiten mehr Freiheitsgrade als 
CreateProcess().

Autor: Norbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Das U (Gast)
Datum:

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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Norbert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.