AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu C (Linux Programmierung)

Ein Thema von A.Griffin · begonnen am 10. Mai 2017 · letzter Beitrag vom 11. Mai 2017
Antwort Antwort
Seite 1 von 2  1 2      
A.Griffin

Registriert seit: 17. Feb 2017
94 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Frage zu C (Linux Programmierung)

  Alt 10. Mai 2017, 14:12
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.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Frage zu C (Linux Programmierung)

  Alt 10. Mai 2017, 14:22
..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
Klaus
  Mit Zitat antworten Zitat
A.Griffin

Registriert seit: 17. Feb 2017
94 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Frage zu C (Linux Programmierung)

  Alt 10. Mai 2017, 14:24
Gibt stderr auch den Zeitstempel an?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Frage zu C (Linux Programmierung)

  Alt 10. Mai 2017, 14:37
Gibt stderr auch den Zeitstempel an?
stderr gibt die selben Daten aus die du auch auf stdout sehen würdest.
Automatisch wird dort kein Zeitstempel hinzugefügt.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
A.Griffin

Registriert seit: 17. Feb 2017
94 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Frage zu C (Linux Programmierung)

  Alt 10. Mai 2017, 14:48
Ok danke. Ich habe jetzt eine Funktion gefunden, die einen Fehler in einer log Datei mit Zeitstempel schreibt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.016 Beiträge
 
Delphi 12 Athens
 
#6

AW: Frage zu C (Linux Programmierung)

  Alt 10. Mai 2017, 15:39
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 WriteLn(LogFile, DateTimeToStr(Now), Text); oder WriteLn(Text); Oder alles mit "Datei", einmal AssignFile gegen eine Datei oder als Datei STDERR oder STDOUT verwenden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
A.Griffin

Registriert seit: 17. Feb 2017
94 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Frage zu C (Linux Programmierung)

  Alt 10. Mai 2017, 15:50
Ich habe das genutzt:

Code:
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));
}
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?

@himitsu: WriteLn ist Delphi (Pascal)

Geändert von A.Griffin (10. Mai 2017 um 16:29 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: Frage zu C (Linux Programmierung)

  Alt 10. Mai 2017, 16:43

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?
also STDERR und STDOUT, wie Klaus vorgeschlagen hat, ist m.E. best practice. So wird es in Linux gehandhabt. Du brauchst es nicht anders zu machen.
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...
Gruß, Jo
  Mit Zitat antworten Zitat
A.Griffin

Registriert seit: 17. Feb 2017
94 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Frage zu C (Linux Programmierung)

  Alt 10. Mai 2017, 16:49
Das würde dann so gehen:

Code:
fprintf( stderr, "Text" );
und dann in linux die software so starten:

Code:
programm 2> Datei.txt
Es würde dann nur noch der Zeitstempel fehlen.

Geändert von A.Griffin (10. Mai 2017 um 16:54 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.273 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Frage zu C (Linux Programmierung)

  Alt 10. Mai 2017, 17:02
Hallo,

Zeitstempel steht weiter oben schon
fprintf(fpError, "%s: %s\r\n", getTimestamp(), logBuf); oder halt gleich so
fprintf(stderr, "%s: %s\r\n", getTimestamp(), logBuf);
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz