Ah, das klärt einiges (das mit den dev Paketen).
Ok, dann muss ich glaub ich den Admin mal treten, dass er die noch installiert, weil er meinte man muss die Programm unbedingt auf dem cluster kompilieren.
Guter Punkt auch mit den / statt \, muss ich mal ändern. Unter Windows funktioniert glaub ich eh beides.
Danke für die Antworten!
Hallo zusammen,
habe folgendes Problem:
mein Main:
static bool m_RunApplication = false
int main(int32 argc, char* argv[])
{
if(argc != 2)
{
return 0;
}
filename = argv[1];
initProg();
//install the handles for update and for exit with ctrl+c
installHandles();
m_RunApplication = true;
while(m_RunApplication)
{
runProg();
}
deInitProg();
return 0;
}
installHandles()
void installHandles()
{
//signal for the cyclic update
struct sigaction sa;
struct itimerval timer;
//signal for close the application
struct sigaction exit;
//install timer_handler as the signal for SIGVTALRM
memset(&sa, 0 , sizeof(sa) );
sa.sa_handler = &timer_handler;
sigaction(SIGVTALRM , &sa , NULL);
//Configure the timer to expire after 100msec...
timer.it_value.tv_sec = 0;
timer.it_value.tv_usec = 100000;
//...and every 100ms after that.
timer.it_interval.tv_sec = 0;
timer.it_interval.tv_usec = 100000;
//Start the virtual timer
setitimer(ITIMER_VIRTUAL, &timer, NULL);
//install signal ctrl+c
exit.sa_handler = &exit_handler;
sigaction(SIGINT , &exit , NULL);
}
und zu letzt exit_handler
void exit_handler(int signum)
{
m_RunApplication = false;
}
Das ganze funktioniert einwandfrei. Aber sobald ich vor dem Aufruf des installHandles() (in main bevor Zeile 13) ein
std::cout << " test" << std::endl;
einfüge wird nach dem drücken von ctrl+c ein Core Dump erstellt.
Hat jemand eine Ahnung wieso das passiert?
Martin123 schrieb:
ich hab es schon mit sed versucht aber da wird einfach nichts ersetzt
sed -e 's/SEARCH/SEARCH/SEARCH/eingabe/g' < eingabe.txt > ausgabe.txt
Klar, wenn Du ' verwendest, dann expandiert die Shell die Umgebungsvariablen ja auch nicht vor dem sed-Aufruf. Verwende " und das sollte klappen.
Das ist nicht von der Shell abhängig sondern vom Terminal. Das ist ein wenig iriitierend. Wenn ich eine Fenster mit einer Eingabezeile auf dem Bildschirm habe, läuft in einem Terminalfenster (xterm, konsole, oder was auch immer) ein Programm, welches Kommandos entgegen nimmit: die Shell. Ich kann die Shell ja in unterschiedlichen Terminals (oder auch ganz ohne) laufen lassen. Ich kann aber auch ein anderes Programm wie z. B. ping oder mc in einem Terminal laufen lassen. Das Terminal ist das Programm, welches die Escape-sequenzen interpretiert.
An dieser Stelle möchte ich auf meinen Beitrag in
C/C++ Forum :: C++ :: Powerknopf deaktivieren
verweisen.
Einmal kurz den Ausknopf betätigen und schon beendet sich dank ACPI KDE und der Rechner fähr herunter.
danke chris, jedoch bringt er mir bei der Variante ADA in C
folgende Fehlermeldung beim compilieren
ada/adatoc> gcc -o main main.o lib.o
lib.o: In function my_proc': lib.o(.text+0x20): undefined reference toada__text_io__put_line__2'
collect2: ld returned 1 exit status
ada/adatoc>
hast du nen Tip?
die Variante C to Ada funzt.. er wirft 2 raus
thx UFO
p.s.
die Beschriftung der Dateien muss bei deinem zweiten Post so lauten oder?
main.c
lib.ads
lib.adb
readme
net das ich da was falsch zugeordnet habe
LinuxProgrammierer schrieb:
Also haben die Sockets keine eigene Klasse oder einen eigenen Namespace?
In C gibt es weder Namespaces noch Klassen. Und da POSIX und BSD (wobei letzterem die Sockets-Bibliothek entspringt) rein C sind, ergibt sich das
Ich hab's gefunden: Bei SuSE 10.0 steht das Gnome-Menü unter
/opt/gnome/share/applications/
Jetz frag ich mich nur noch, wieso bei zwei neuen Einträgen, die ich angelegt habe und die den gleichen "Categories"-Eintrag haben, eines unter "Grafik/Bildbetrachter" und das andere unter "Grafik/Bildbearbeitung" aufgelistet wird.
Ich denke, das schwierigste ist, Befehle wie cat some | sort | tail > file.dat 2>&1
wenn du noch nie mit dup/pipes und so gearbeitet hast, kannst du erstmal damit anfangen, diese zu verstehen, sprich, wie man sie benutzt (das ist nicht trivial und am Anfnag kostet relativ viele Nerven). D.h. du solltest dann ein programm schreiben, welches ein Programm 'x' startet und die stdout Ausgabe von 'x' durch eine pipe an 'cat' weiterleitet:
1. pipes einrichten
2. fork für 'x' und fork für 'cat'
3. mittels dup stdout von 'x' mit stdin von 'cat' verbinden
4. exec 'x' und exec 'cat' ausführen
Dann würde dein Programm folgender Shell Befehlzeile entsprechen:
$ x | cat
Du wirst sehen, dass das ein wenig arbeit ist, aber du musst zuerst diese gut beherrschen, bevor du sowas wie oben machen kannst.
Ich denke, der Parser ist die wenig schwierige Arbeit (vielleicht lässt sich mit flex & Co. schnell etwas schreiben).
Ich arbeite meistens mit dem Linux/Unix Systemprogrammierung Buch, damit bin ich echt zufrieden, da bekomme ich gute Beispiele und Erklärungen (wie oben von den pipes, usw)
Linux/Unix-Systemprogrammierung | ISBN: 3827321603
Überleg dir doch ob du nicht eine fertige message_queue-Klasse verwenden kannst. Bzw. schreib dir zur Not eine. Mutexes von Hand verwenden ist fehleranfällig und wie.
pfu schrieb:
zu meiner schande. ich habe noch nie mit streams gearbeitet.
Dann wird's aber Zeit!
Im Ernst, wenn du Messwerte abspeichern willst - und das musst du für die Ausgabe mit GNUPlot tun - dann wirst du wohl um streams nicht herumkommen. (Ach ja, du programmierst ja in C++ und arbeitest wahrscheinlich mit "cout".)
Sieh dir doch mal man fopen an!
Hier ist ein kurzes ANSI-C-Programm, das mit GNUPlot eine PBM-Datei erzeugt (ist vielleicht auch für andere interessant.):
# include <stdio.h>
int main()
{
FILE *stream;
stream = fopen("messwerte.dat", "w");
fprintf(stream, "1 0\n2 1\n3 3\n4 6\n5 8\n6 9\n7 8\n8 6\n9 3");
fclose(stream);
stream=popen("gnuplot", "w");
fprintf(stream, "set terminal pbm color\nset output 'diagramm.ppm'\n");
fprintf(stream, "set grid\nset title 'Messwerte'\n");
fprintf(stream, "plot 'messwerte.dat' w linespoints 1 4\n");
fprintf(stream, "set output\n");
fclose(stream);
return(0);
}
> gcc -Wall -o plot plot.c
> plot
Dann erhälst du eine Datei "diagramm.ppm" mit den fiktiven Messwerten als Grafik.
(Für ein ordentliches Programm müsstest du allerdings noch mögliche Fehler bei fopen() oder popen() abfangen und vorher prüfen, ob GNUPlot überhaupt vorhanden ist.)
CStoll schrieb:
@LordJaxom: Siehst du, man muß es den Leuten nur ausführlich genug erklären, dann hören sie auch
Mit der Gefahr, dass er bei printf, time oder isdigit wieder fragt
Ja, und dazu kommt C++. Musste ne C-Lib wrappen, damit ich sie in C++ nutzen konnte. Mit dem struct gehts nun und ist auch schon klar. C brauches und in C++ kann ich's weg lassen. Danke schön.
Gruß,
tyr377