Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Linux Forum Linux-Web.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

benshi

Fortgeschrittener

  • »benshi« ist männlich
  • »benshi« ist der Autor dieses Themas

Beiträge: 175

Wohnort: NRW

Beruf: Student!

  • Nachricht senden

1

08.10.2007, 12:57

system("cd") nutzbar machen

Hallo Leute,
unten seht ihr mein c++ Programm. Ich möchte (hier beispielsweise) mittels system("cd /home") das Verzeichnis des Ausführenden Benutzers wechseln. Natürlich klappt das nicht, denn der Befehl wird in einer Subshell ausgeführt. Das stört mich, nochmehr stört mich, dass der Aufruf . ./meinProgramm einen Fehler erzeugt:
bash: /meinProgramm Verzeichnis nicht gefunden
Außerdem nervig ist, das system(...) immer noch nach Beendigung 0 ausgibt.
Hat jemand eine Lösung?

Hier das Programm:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <stdlib.h>

#include <iostream> 
using std::cout;

int main(){
  int i=system("cd /home");
  cout << i;
  return 0;
}


Andere Frage, gibt es eine c++ Lösung, so dass ich die C-Header nicht mehr einbinden muss?

2

08.10.2007, 15:37

RE: system("cd") nutzbar machen

Zitat

Original von benshi
Andere Frage, gibt es eine c++ Lösung, so dass ich die C-Header nicht mehr einbinden muss?

Du kannst auch die C++-C-Headerdateien verwenden ->

Quellcode

1
2
#include <cstdio>
#include <cstdlib>

Ansonsten: Nein.

benshi

Fortgeschrittener

  • »benshi« ist männlich
  • »benshi« ist der Autor dieses Themas

Beiträge: 175

Wohnort: NRW

Beruf: Student!

  • Nachricht senden

3

08.10.2007, 16:52

Ok,
danke schonmal dafür, bleibt noch das eigentliche Problem,
Ben

4

08.10.2007, 18:19

ich denk nicht, dass das mit der c++-standard-lib moeglich ist, da c++ das konzept der verzeichnisse afaik gar nicht kennt.
ergo müsstest du auf systemspezifische funktionen zurueckgreifen, sprich system-api.
oder du machst es dir einfach und nimmst ein framework/api, welches schon entsprechende wrapper-klassen anbietet, z.b. Qt oder Boost.

mfg,
julian

benshi

Fortgeschrittener

  • »benshi« ist männlich
  • »benshi« ist der Autor dieses Themas

Beiträge: 175

Wohnort: NRW

Beruf: Student!

  • Nachricht senden

5

08.10.2007, 19:29

Danke für die Tipps,
ich denke Boost hört sich auf jeden Fall interessant an, abgesehen davon, dass es für meine jetzigen Zwecke wohl unnötiger Overhead wäre. Qt schießt ganz vorbei, da ich nie vorhatte in irgend einer Weise graphisch zu programmieren. Ich werde wohl auch mal kurz die system-api unter Augenschein nehmen (bin mir jetzt allerdings noch nicht so ganz sicher, wonach ich da eigentlich suchen muss).
Ben

6

08.10.2007, 19:41

ja, boost ist sehr gross, das stimmt.
ich weiss auch nicht genau, wie du das arbeitsverzeichnis d. programms wechselst per system-api, aber da könnten evtl. auch die qt- oder boost-sourcen weiterhelfen.
oder wie immer: gooooooogle

mfg,
julian

7

08.10.2007, 20:31

Zitat

unten seht ihr mein c++ Programm. Ich möchte (hier beispielsweise) mittels system("cd /home") das Verzeichnis des Ausführenden Benutzers wechseln. Natürlich klappt das nicht, denn der Befehl wird in einer Subshell ausgeführt. Das stört mich, nochmehr stört mich, dass der Aufruf . ./meinProgramm einen Fehler erzeugt:
bash: /meinProgramm Verzeichnis nicht gefunden
Außerdem nervig ist, das system(...) immer noch nach Beendigung 0 ausgibt.
Hat jemand eine Lösung?


1. die 0 bekommst du weil du cout <<i in deinem Code hast und wenn du einen Fehler bekommst ist i = 0

2. schreib doch einfach die Ausgabe des befehls in eine tmp datei, die du anschließend wieder ausliest und löschst
Für jedes noch so komplexe Problem gibt es eine einfache, einleuchtende und falsche Lösung.

benshi

Fortgeschrittener

  • »benshi« ist männlich
  • »benshi« ist der Autor dieses Themas

Beiträge: 175

Wohnort: NRW

Beruf: Student!

  • Nachricht senden

8

09.10.2007, 16:06

So,
ich habs jetzt quick and dirty gemacht:
Zuerst das c++ Programm geschrieben, welches mir den Pfad für cd liefert.
Dann ein Shellscript geschrieben (z.B. hier go2), welches cd mit der Ausgabe des c++ Programms ausführt.
Und schließlich einen Alias definiert (alias go='. go2'), so dass nun go die gewünschten Eigenschaften hat.
Danke nochmal für alle Tipps,
Ben

Thema bewerten