![]() |
Frage zu C (Linux Programmierung)
Ich habe eine C Konsolenanwendung am laufen. Diese Anwendung hat auch eine Konsolen-GUI. Meine Frage: Ich habe in einem Fehlerfall bis jetzt die Fehler mit printf auf die Konsole geschrieben. Dies ist ist in diesem Fall sehr unschön, da die Konsolen-GUI ein Teil der Konsole ja bedeckt und man dadurch bei den Fehlern nicht gut durchblickt. Meine Idee wäre es jetzt die Fehler anstatt auf die Konsole in eine Textdatei zu schreiben. Am besten mit Zeitstempel. Weiß einer von euch wie ich das am besten machen könnte?
Vielen Dank im Voraus. |
AW: Frage zu C (Linux Programmierung)
..gib die Fehler doch auf STDERR.
STDERR kannst DU wenn das Programm gestartet wird umleiten (in ein File oder nach dev/null) Grüße Klaus |
AW: Frage zu C (Linux Programmierung)
Gibt stderr auch den Zeitstempel an?
|
AW: Frage zu C (Linux Programmierung)
Zitat:
Automatisch wird dort kein Zeitstempel hinzugefügt. Grüße Klaus |
AW: Frage zu C (Linux Programmierung)
Ok danke. Ich habe jetzt eine Funktion gefunden, die einen Fehler in einer log Datei mit Zeitstempel schreibt.
|
AW: Frage zu C (Linux Programmierung)
Der Nächste freut sich bestimmt ganz doll, dass du deine Lösung nicht verraten hast, wenn er das selbe Problem hat und diesen Thread irgendwann findet.
PS: WriteLn hat auch einen Parameter für die Datei. Also einmal mit
Delphi-Quellcode:
oder
WriteLn(LogFile, DateTimeToStr(Now), Text);
Delphi-Quellcode:
Oder alles mit "Datei", einmal AssignFile gegen eine Datei oder als Datei STDERR oder STDOUT verwenden.
WriteLn(Text);
|
AW: Frage zu C (Linux Programmierung)
Ich habe das genutzt:
Code:
Ich habe aber jetzt das Problem, dass das nicht threadsicher zu sein scheint und die Software abstürzt, wenn ErrorAdd in einem zweiten Thread genutzt wird. Was kann ich da machen?
void
ErrorAdd (const char *str, ...) { FILE *fpError; va_list ap; char logBuf[256]; static char oldLogBuf[256]; archiveFile(LOG_PATH "/" ERROR_LOG_NAME); va_start (ap, str); vsprintf (logBuf, str, ap); va_end (ap); if (strcmp(oldLogBuf, logBuf)) { fpError = fopen(LOG_PATH "/" ERROR_LOG_NAME, "ab"); fprintf(fpError, "%s: %s\r\n", getTimestamp(), logBuf); fclose(fpError); } memcpy(oldLogBuf, logBuf, strlen(logBuf)); } @himitsu: WriteLn ist Delphi (Pascal) |
AW: Frage zu C (Linux Programmierung)
Zitat:
So kann der User (z.B. Du während der Entwicklung) entscheiden, wo der Kram hingeht, Dateiumleitung, STDOUT, dev/null, .. Unter Windows soll es sowas ja auch geben... |
AW: Frage zu C (Linux Programmierung)
Das würde dann so gehen:
Code:
und dann in linux die software so starten:
fprintf( stderr, "Text" );
Code:
Es würde dann nur noch der Zeitstempel fehlen.
programm 2> Datei.txt
|
AW: Frage zu C (Linux Programmierung)
Hallo,
Zeitstempel steht weiter oben schon
Delphi-Quellcode:
oder halt gleich so
fprintf(fpError, "%s: %s\r\n", getTimestamp(), logBuf);
Delphi-Quellcode:
fprintf(stderr, "%s: %s\r\n", getTimestamp(), logBuf);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz