[gelöst] Linux Befehle in C-Programme implementieren
-
Hi an alle,
meine C Kenntnisse und Linux Kentnisse sind sehr schlecht.
Ich habe bis jetzt immer nur unter Windows Programmiert.Ich würde jetzt gerne ein C-Programm schreiben das sich mit Linux Shell Befehlen verknüpfen lässt.
z.B.:
das Programm fragt: in welches Verzeichniss möchten sie wechseln:
User-Input: /home/username
das Programm gibt aus: sie Befinden sich im folgendem Verzeichniss: pwd
das Programm gibt aus: ls -alkennt sich damit jemand aus und kann mir dabei helfen?
Danke schon mal
-
Um externe Programme aufzurufen kann man system() nutzen. "man system" auf der Console liefert eine Erklärung des Aufrufs.
Gibt es diese Funktion nicht auch unter DOS/Windows?
-
ja den gibt es dort auch.
Nur mir ist der befehl nicht eingefallen.
ich werd es mal probieren mit einem ls.
Danke Dr. Tux----EDIT-----
Perfekt es hat geklappt
Danke die Dr. Tux.
Code sieht wie folgt aus:/* Kommentare hier */ #include <stdio.h> int main (int argc, char *argv[]) { system("ls"); return(0); }
-
ich habe leider kein manual zu system gefunden.
ist es möglich eine variable in system einzugeben.
wie z.B.:
system("cd %c",var);
wobei var eine Variable ist in der das Verzeichniss steht.
-
omg
just try it
-
pistol schrieb:
ich habe leider kein manual zu system gefunden.
ist es möglich eine variable in system einzugeben.
wie z.B.:
system("cd %c",var);
wobei var eine Variable ist in der das Verzeichniss steht.Einfach mal "man system" in der Konsole eingeben oder im Konqueror "#system". Da bekommst Du einen Online-Hilfe.
Zu der konkreten Frage: nein - es ist nicht möglich, eine Variable zu verwenden.
Und noch was: "cd" ist ein ganz schlechtes Beispiel, da "system" ein Kindprozess startet und dort das cd ausführt. Anschliessend wird der Kindprozess wieder beendet und das Ergebnis von cd ist hinfällig. Dein Prozess (also der Vaterprozess ) befindet sich weiterhin in dem Verzeichnis, wo er vorher war. Prinzipiell sollte man die API bevorzugen. System ist nur ein Notbehelf. Schau mal beim "man chdir" oder "man opendir" nach, um auf Deine Beispiele "ls" und "cd" einzugehen.
-
danke für die antwort tntnet.
chdir oder opendir ist eigentlich nicht das was ich will
ich hab nämlich folgendes problem.
der user gibt den namen seines erstellten backups ein und ich will das laden.
zb:
system("recover FILENAME");
das war meine frage.
vielleicht kennt ja jemand eine Lösung.
-
char buffer[2048]; sprintf(buffer, "befehl %s", irgendeine_datei); system(buffer);
-
Das ist das, wo die Pufferüberläufe herkommen. Ersetzte mal sprintf mit snprintf oder in C++ besser gleich mit std::string:
std::string cmd; cmd = "recover "; cmd += irgendeine_datei; system(cmd.c_str());
Besser wäre allerdings fork und exec, aber das ist komplizierter.
-
Ich habe zufällig so ein Programm in Softwaresysteme programmieren müssen. Ich geb dir mal den Link für die Übungsfolien zu dieser Aufgabe. Da steht alles zu den Funktionen drin. Du brauchst fork, execvp. Schau dir mal die Übungs-Folien zur 3. Aufgabe an.
http://www4.informatik.uni-erlangen.de//Lehre/SS07/V_SOS1/Uebung/
Viel Spaß
-
pistol schrieb:
danke für die antwort tntnet.
chdir oder opendir ist eigentlich nicht das was ich will
ich hab nämlich folgendes problem.
der user gibt den namen seines erstellten backups ein und ich will das laden.
zb:
system("recover FILENAME");
das war meine frage.
vielleicht kennt ja jemand eine Lösung.Für solche Sachen ist im Allgemeinen ein Shell-Skript eine einfachere Lösung.
#!/bin/sh echo -n "Datei eingeben: " read DATEI recover $DATEI
Dazu fällt mir spontan nur der Link ein: http://www.galileocomputing.de/openbook/unix_guru/node303.html
Gibt sicher bessere.Das ganze soll dich natürlich nicht davon Abhalten, C zu lernen
-
Danke erst mal soweit
werd es mal die Tage versuchen. Shell script kommt leider nicht in frage aber ich werd es trotzdem mal lesen und was dazu lernenDanke an alle beteiligten.