Mein Ziel ist das C++ programmieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Mein Ziel ist das C++ programmieren

Beitrag von DEBIANUNDANDREAS » 24.10.2013 12:31:23

C++ Quelltext +string command+Code Problem

Wie kann man im folgenden C++ Quelltext eine Erweiterung von C++ Code einfügen

'///*********************************************** ', damit ich
zusätzliche C++ Befehle, und Terminal Output mittels string command ausgeben kann ?


An dieser stelle hatte ich folgenden C++
'Code ///***********************************************'

Quellcode

Code: Alles auswählen

str.clear();
std::string command="gedit --new-window & alert";// Ergebnis ist ein std::string
system(command.c_str());

eingegenben.

Quellcode

Code: Alles auswählen

#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[])
{
string command="gedit --new-window & gedit --new-window & gedit --new-window";
system(command.c_str());

///***********************************************


cout << "Hello world!" << endl;
return 0;
}

Mein Ziel ist das C++ programmieren, ich will mehrere Instanzen von gedit, oder cp ,Alert etc starten.

napster
Beiträge: 20
Registriert: 14.09.2009 13:49:25
Wohnort: Suttgart

Re: Mein Ziel ist das C++ programmieren

Beitrag von napster » 24.10.2013 12:40:42

Du drückst dich ziemlich unverständlich aus :roll:

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Mein Ziel ist das C++ programmieren

Beitrag von DEBIANUNDANDREAS » 24.10.2013 13:05:38

Etwas verbesserte Darstellung meines Problems.
Quellcode

Code: Alles auswählen

#include <iostream>
    #include <cstdlib>
    using namespace std;
    int main(int argc, char *argv[])
    {
    string command="gedit --new-window & gedit --new-window & gedit --new-window";
    system(command.c_str());

    ///***********************************************


    cout << "Hello world!" << endl;
    return 0;
    }
Bis hier scheint es zu funktionieren.
------------------------------------------------------------------------------------------------------------------------------
///*********************************************** <<< dieses soll den platzhalter für mir neueren C++ Code sein.

Code: Alles auswählen

str.clear();   --------------------------------------------------------------------------------------------------
std::string command="gedit --new-window & alert";// Ergebnis ist ein std::string   ------ dieses will ich integrieren, allerdings ohne '-'
system(command.c_str())
-------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------
Mein Ziel ist das C++ programmieren, ich will mehrere Instanzen (parallel oder sequentiell) von gedit, oder cp ,Alert etc starten.
-----------------------------------------------------------------------------------------------------------------------------------------------------

Gedanken. es gibt einen string command Buffer der an die Terminal Konsole weitergereicht wird, dadurch ist der string command Buffer überfüllt, und gibt keine Ausgabe mehr ans Terminal!?
Nur dieses funktioniert

Code: Alles auswählen

 str.clear();
nicht

Benutzeravatar
schorsch_76
Beiträge: 2601
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: Mein Ziel ist das C++ programmieren

Beitrag von schorsch_76 » 24.10.2013 13:28:53

Also ich versteh nicht wirklich was du willst.

Willst du das die gedit Fenster sequentiel aufgehen?
Willst du das die gedit Fenster parallel aufgehen?

Brauchst du die return Werte?

Warum geht für so eine einfache Geschichte kein bash? std::system ruft ja genau das auf.

Hast du noch anderen Code der dann auf die Ergebnisse der Fenster angewiesen ist?

Muss es gedit sein? Kannst du etwa mit wxWidgets, GTK oder Qt arbeiten um deine GUI zu machen?

Deine Spezifikation der Anforderung ist nicht ausreichend. Ebenso die Spezifikation der zu Verfügung stehenden Mittel.

In deinem Code sehe ich keine Variable namens str. Als Kompiler würde ich sagen: "str not defned". Es gibt nur eine Variable namens argc,argv und command. Warum soll eine nicht vorhandene Variable "überfüllt" sein. "Überfüllt" kann eine Variable/Container nicht sein. Es kann nur der Arbeitsspeicher knapp werden.

Squentielle Starts von gedit, whatever macht man halt so

Code: Alles auswählen

std::string command = "gedit --new-window";
for (int i = 0; i < 100; ++i)
    std::system(command.c_str());
Gruß
schorsch

napster
Beiträge: 20
Registriert: 14.09.2009 13:49:25
Wohnort: Suttgart

Re: Mein Ziel ist das C++ programmieren

Beitrag von napster » 24.10.2013 16:24:09

Sorry aber ich verstehe immernoch nicht was du willst.

Und eine verbesserte Darstellung war das überhaupt nicht.

Beim durchlesen deiner Beiträge habe ich das Gefühl da jagt jemand in einer anderen Sprache die Sätze in den Googletranslator und pastet sie auf Deutsch hier rein. Die Ausgangsprache ist mir unbekannt :mrgreen:

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Mein Ziel ist das C++ programmieren

Beitrag von DEBIANUNDANDREAS » 24.10.2013 17:02:39

Ich bin hier im Forumsabschnitt angelangt.Foren-Übersicht ‹ Fortgeschrittene Themen ‹ Softwareentwicklung und -paketierung, Scripting
Derfolgende code funktioniert nur einmal.
....

Code: Alles auswählen

std::string command="gedit --new-window & gedit --new-window & gedit --new-window";
    system(command.c_str());
...
------------------------------------------------------------------------
Ich möchte aber mehrfach so eine Codezeile nutzen können, oder eben eine bessere Alternative in C++

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Re: Mein Ziel ist das C++ programmieren

Beitrag von peschmae » 24.10.2013 17:09:40

Natürlich funktioniert das auch mehrmals, der Code läuft natürlich erst weiter, sobald die gedit-Prozesse beendet wurden - wie in der Manpage von system beschrieben. Ansonsten musst du halt forken.

Poste doch mal ein lauffähiges Program und schreibe dazu, was es deiner Meinung nach machen sollte und nicht tut....

MfG Peschmä

P.S. Und das mit den Monsterschriftgrössen lassen wir besser mal sein, übersichtlicher wird das Forum dadurch nicht...
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Mein Ziel ist das C++ programmieren

Beitrag von DEBIANUNDANDREAS » 24.10.2013 17:27:19

Hier nocheinmal ein C++ Code

Code: Alles auswählen

#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
int main(const char*,int argc, char *argv[])
{
string command = "gedit --new-window";
for (int i = 0; i < 100; ++i)
    system(command.c_str());


    return 0;
}
Dieses verursacht unbegrenzte und gestartete gedit, jedes einzelne gedit muss man beenden, dann startet eine neue Instanz von gedit, ohne ende.Zum ausprobieren des codes(s.o) nutze ich Code:Blocks 10.05
und dann den Menueintrag 'Build' >>>'Run'.
Mein Problem lässt sich so aber nicht lösen, und schlecht erklären. Soweit mir bekannt lässt sich

Code: Alles auswählen

system(command.c_str());
nur einmal nutzen.
Mein Ziel ist das C++ programmieren, ich will mehrere Instanzen von gedit, oder cp ,Alert etc starten.

Benutzeravatar
mindX
Beiträge: 1541
Registriert: 27.03.2009 19:17:28
Lizenz eigener Beiträge: GNU General Public License

Re: Mein Ziel ist das C++ programmieren

Beitrag von mindX » 24.10.2013 17:31:33

Hier noch ein paar Mosaiksteinchen: http://forum.ubuntuusers.de/topic/c-und ... programme/

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Mein Ziel ist das C++ programmieren

Beitrag von DEBIANUNDANDREAS » 24.10.2013 20:18:49

Als ich folgenden C++ Code durch Code::Blocks (gcc) schickte, also 'Build' >>>'Run" >>>

Code: Alles auswählen

#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
int main(const char*,int argc, char *argv[])
{
string command = "alert"  ;
   system(command.c_str());
    return 0;
}
>>> startete ein Terminal mit folgender Ausgabe>>>

Code: Alles auswählen

sh: 1: alert: not found

Process returned 0 (0*0) execution time : 0.003 s
Press Enter to continue
.

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Mein Ziel ist das C++ programmieren

Beitrag von newdeb » 24.10.2013 20:34:29

Und was ist jetzt deine Frage dazu?

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Mein Ziel ist das C++ programmieren

Beitrag von DEBIANUNDANDREAS » 24.10.2013 20:42:56

Erst der C++ Code,

Code: Alles auswählen

#include <stdio.h>
#include <unistd.h>
#include <string>
#include <iostream>
#include <stdlib.h>

using namespace std;
int main(int argc, char *argv[]) 
{
printf("");
printf("alert\n\n");
return 0;
}
der funktioniert nicht weil 'alert' steht zwar in dem Code::Blocks Terminal aber die Bildschirm Warnung (OSD?) oben rechts nicht.
Wie kann ich also alert zum starten bewegen?

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Mein Ziel ist das C++ programmieren

Beitrag von newdeb » 24.10.2013 21:00:01

Ich stehe nicht hinter dir und schaue dir über die Schulter, also was soll so eine Angabe wie "Bildschirm Warnung (OSD?) oben rechts"?
Ein mit system(3) initiiertes Kommando wird in der Systemshell /bin/sh ausgeführt, und zwar entsprechend wie die Shell-Kommandozeile:

Code: Alles auswählen

/bin/sh -c <Kommando>
Nachzulesen in der Manpage:
SYSTEM(3) Bibliotheksfunktionen SYSTEM(3)
BEZEICHNUNG
system - führe ein Shellkommando aus
...
BESCHREIBUNG
system() führt ein Kommando, das in string spezifiziert ist, durch Aufruf von /bin/sh -c string aus und kehrt zurück wenn das Kommando beendet ist. ...
Die Shell findet "alert" (was ist das überhaupt?) einfach nicht. Und es nützt auch nichts, wenn du den Text "alert" zuerst in das Terminalfenster schreibst. Das Kommando muss als ausführbare Datei im Filesystem vorhanden sein, d.h. über PATH auffindbar oder mit korrektem Pfad im system-Call angegeben werden, sonst wird das nichts. Versuchs probeweise mal mit einem "echo" oder "ls", das sollte gehen.

Benutzeravatar
4A4B
Beiträge: 962
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: Mein Ziel ist das C++ programmieren

Beitrag von 4A4B » 24.10.2013 21:04:01

Code: Alles auswählen

sh: 1: alert: not found
Die Shell kennt den Befehl alert nicht. Möglicherweise suchst du sowas wie Debianzenity?

... wobei dieser Befehl auch über system() ausgeführt werden muss und du dann auch gleich ein Shell-Script schreiben könntest.

Bei der Frage, wie man so ein "Alert"-Fenster direkt in C++ umsetzt, kann ich leider nicht weiterhelfen

napster
Beiträge: 20
Registriert: 14.09.2009 13:49:25
Wohnort: Suttgart

Re: Mein Ziel ist das C++ programmieren

Beitrag von napster » 24.10.2013 22:44:23

Du kannst dein Problem nicht mal in Worte fassen . Sollen wir das hier im Forum erraten? :D

Gunman1982
Beiträge: 923
Registriert: 09.07.2008 11:50:57
Lizenz eigener Beiträge: MIT Lizenz

Re: Mein Ziel ist das C++ programmieren

Beitrag von Gunman1982 » 25.10.2013 04:44:11

Du willst diese grafischen Textbubbles in vermutlich gnome?!

Schau dir libnotify an: https://wiki.archlinux.org/index.php/libnotify#C.2B.2B

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Mein Ziel ist das C++ programmieren

Beitrag von DEBIANUNDANDREAS » 25.10.2013 05:50:38

Allen Postings gleichzeitig, zu entsprechen kann ich nicht. Also lass ich den C++ Quelltext weg,, der sollte wenn möglich individuell sein.
Mein Ziel ist das C++ programmieren, ich will mehrere Instanzen von gedit, oder cp ,Alert etc starten.
Und dass alles aus einem C++ Quelltext ( gcc kompilert).
Die Programme sollten in einer Konsole, die Systembefehle in der selbigen Konsole sequentiel oder parallel starten können.

Sequentiel entspricht nacheinnander.
Paralell entspricht Multitasking.

Gibtes denn keine Möglichkeit das Systemkommando von C++ Quelltext(kompiliert zu löschen? >>>str.clear(); half nicht
Wie kann ich printf ausführbar machen? >>>

Code: Alles auswählen

printf("cp\n\n");
<<< Codeshniplet startet nicht

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Mein Ziel ist das C++ programmieren

Beitrag von newdeb » 25.10.2013 07:53:55

DEBIANUNDANDREAS hat geschrieben: Derfolgende code funktioniert nur einmal.
....

Code: Alles auswählen

std::string command="gedit --new-window & gedit --new-window & gedit --new-window";
    system(command.c_str());
...
------------------------------------------------------------------------
Ich möchte aber mehrfach so eine Codezeile nutzen können, oder eben eine bessere Alternative in C++
Hier liegt offenbar der Kern deines Problems. Eine Deklaration- bzw Definition einer Variablen sollte nur einmal vorkommen.
Nachfolgend benutzt man sie einfach.
Wenn ich mich nicht irre, verhalten sich die C-Strings ähnlich wie der die Java-Stringbuffer-Objekte, d.h. man kann neue Inhalte zuweisen.
Das sollte auch ganz einfach mit dem Operator '=' gehen, da dieser überladen ist (alternativ könnte man auch clear/insert verwenden) .

Code: Alles auswählen

#include <iostream>
#include <cstdlib>
using namespace std;

int main(int argc, char *argv[])
{
    string command="gedit --new-window &";
    system(command.c_str());

    command="cp quelle ziel";
    system(command.c_str());

    command="find . -name '*.cpp' -ls";
    system(command.c_str());

    return 0;
}


Benutzeravatar
schorsch_76
Beiträge: 2601
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: Mein Ziel ist das C++ programmieren

Beitrag von schorsch_76 » 25.10.2013 08:00:14

Wenn du parallel starten willst, macht man das
a) mit forken
b) über Threads.

Bsp.

Code: Alles auswählen

#include <boost/thread.hpp>
#include <vector>

void DoCommand()
{
	std::string command = "gedit --new-window";
	std::system(command.c_str());
}

int main(int argc, int argv)
{
	static const int nr_of_threads = 10;
	boost::thread_group my_threads;

	// start all threads
	for (int i = 0; i < nr_of_threads; ++i)
	{
		my_threads.add_thread(new boost::thread(DoCommand));
	}

	// join them
	my_threads.join_all();

	return 0;
}
Gruß
schorsch

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Re: Mein Ziel ist das C++ programmieren

Beitrag von peschmae » 25.10.2013 08:08:55

Mit forken wärs dann sowas, um mehrere Instanzen parallel laufen zu lassen:

Code: Alles auswählen

#include <iostream>
#include <cstdlib>
#include <string>

#include <unistd.h>

using namespace std;

int main(int argc, char *argv[])
{
    for (int i = 0; i < 3; ++i)
    {
        pid_t pid = fork();
        if (pid == 0)
        {
             std::cout << "we are the child process" << std::endl;
             execl("/usr/bin/gedit", "");
        }
    }

    return 0;
}
Damit bist du dann allerdings im Land der hässlichen, plattformabhängigen Unix-C-APIs angelangt...

MfG Peschmä

P.S. wenn dein erster Post ausgesehen hätte wie der vierte, und du da sogar noch hingeschrieben hättest was du eigentlich erreichen willst (und damit meine ich nicht "es funktioniert nicht", sondern was es eigentlich machen soll) dann hättest du unsere beiden Antworten auch schon vor laaaanger Zeit gekriegt....
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Mein Ziel ist das C++ programmieren

Beitrag von DEBIANUNDANDREAS » 25.10.2013 08:31:07

Danke an alle Postings, ihr habt mir freundlicherweise, trotz der sprachlichen verständnisproblem auf neue Gedanken ( in Sachen C++) gebracht.
Ich werde eure Codelistings ausprobieren. Die Codelistings sind nur für meinen privaten Eigenbedarf vorgesehen, und so werde ich das handhaben.
Danke an newdeb
danke an schorsch_76
Danke an peschmae

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Mein Ziel ist das C++ programmieren

Beitrag von DEBIANUNDANDREAS » 26.10.2013 13:53:18

Dieser Code ist mein Favorit von und Danke an newdeb. Aber ...

Code: Alles auswählen

#include <iostream>
#include <cstdlib>
using namespace std;

int main(int argc, char *argv[])
{
    string command="gedit --new-window &";
    system(command.c_str());

    command="cp quelle ziel";
    system(command.c_str());

    command="find . -name '*.cpp' -ls";
    system(command.c_str());

    return 0;
}
Ich bekomme es nicht in dir Recoverykonsole, zum laufen.
Wie könnte man den C++ Quelltext nocheinmal ändern damit das Kompilat in der Recoverkonsole funktioniert?
Diesen C++ Code Sniplet hatte ich im Quelltext gelöscht.

Code: Alles auswählen

string command="gedit --new-window &";
system(command.c_str());

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Mein Ziel ist das C++ programmieren

Beitrag von DEBIANUNDANDREAS » 27.10.2013 12:58:46

Zur Zeit habe ich den Quelltext geändert aber ich bekomme das mit switch,case, break nicht hin. Meine C++ Ide ist Code::Blocks und die ist zum verzweifeln.

Mein C++ Code. Wichtig nur für den privaten Gebrauch.
http://nopaste.debianforum.de/37432 <<< Die Komentarezeilen dienen zur späteren Komplierung.

Code::Blocks gibt folgenden output
  • ||=== Project3, Release ===|
    che/Programmieren/output/Project3/main.cpp|39|Fehler: case-Marke »1« nicht innerhalb einer switch-Anweisung|
    che/Programmieren/output/Project3/main.cpp|91|Fehler: case-Marke »2« nicht innerhalb einer switch-Anweisung|
    che/Programmieren/output/Project3/main.cpp|108|Fehler: case-Marke nicht innerhalb einer switch-Anweisung|
    che/Programmieren/output/Project3/main.cpp|44|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    che/Programmieren/output/Project3/main.cpp|49|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    che/Programmieren/output/Project3/main.cpp|54|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    che/Programmieren/output/Project3/main.cpp|60|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    che/Programmieren/output/Project3/main.cpp|65|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    che/Programmieren/output/Project3/main.cpp|71|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    che/Programmieren/output/Project3/main.cpp|77|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    che/Programmieren/output/Project3/main.cpp|83|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    che/Programmieren/output/Project3/main.cpp|95|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    che/Programmieren/output/Project3/main.cpp|99|Warnung: Der Rückgabewert von »int system(const char*)«, der mit dem Attribut warn_unused_result deklariert wurde, wird ignoriert [-Wunused-result]|
    ||=== Erstellen beendet: 13 Fehler, 0 Warnungen===|
Zuletzt geändert von DEBIANUNDANDREAS am 28.10.2013 06:11:04, insgesamt 2-mal geändert.

Benutzeravatar
TRex
Moderator
Beiträge: 8322
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Mein Ziel ist das C++ programmieren

Beitrag von TRex » 27.10.2013 13:19:35

Wie gehst du das eigentlich an, das mit dem C++ lernen? Hast du ein Buch, eine Webseite oder andere Lektüre, die dir die Sprache näher bringt?

Die ersten drei Fehler sind (einfache) Syntaxfehler. Die Fehler über den Rückgabewert sind nur Warnungen, die in deinem Fall irrelevant sind.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
DEBIANUNDANDREAS
Beiträge: 1304
Registriert: 01.06.2013 10:37:46

Re: Mein Ziel ist das C++ programmieren

Beitrag von DEBIANUNDANDREAS » 27.10.2013 13:45:10

Danke, für die Nachfrage, mehrere Bücher von C++ habe ich schon, aber Druckfehler im Buch, ich werde das Problem im Quelltext, und das tue ich auch, durch auskommentieren lösen, ich bin meinem Ziel schon sehr nahe, es ist erreichbar man kann C++ die geschweifte Klammer an eine ander stelle setzen dann gehts.
Code im Buch

Code: Alles auswählen

... switch( befehl );
Mein lösung

Code: Alles auswählen

... switch( befehl ){;
...
Mit anderen Worten, die geschweifte Klammer offen nach recht's, der steile Zahn nach link's das bringt's.

Antworten