Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Segmentation fault nach längerer Laufzeit

Mitglied: LayerAcht

LayerAcht (Level 1) - Jetzt verbinden

14.08.2010 um 19:19 Uhr, 2651 Aufrufe, 3 Kommentare

Hallo an alle Wissenden!

Ich habe ein Problem mit meinem C-Code auf Linux.
Nach einer längeren Laufzeit meines Programms stürzt dieses immer mit einem "segmentation fault" ab. Mittlerweile habe ich auch herausgefunden wo und wann dies passiert. Jedoch kann ich das Problem dennoch nicht lösen.

Die Aufgabe des Programms ist einfach:
Überprüfe alle 60 sek. ob auf einem der 3 E-Mailpostfächer eine E-Mail auf mich wartet.

Um herauszufinden wo das Problem liegt, habe ich ein einfaches printf verwendet (Siehe Code). Damit konnte ich sehen an welcher Stelle das Programm ein "segmentation fault" bekommt. (Wahrscheinlich gibt es einen leichteren und besseren Weg, aber warum einfach wenn es auch schwer geht...)
Somit konnte ich jedenfalls herausfinden, dass das Programm beim 204 ausführen der for-schleife beim letzten sscanf hängen bleibt.

01.
#include <stdio.h> 
02.
#include <string.h> 
03.
 
04.
char new_mail[1024]; 
05.
char mailbuffer[11]; 
06.
int mailbuffer_gesamt; 
07.
int mailbuffer_gelesen; 
08.
int mail_ungelesen_a_1; 
09.
int mail_ungelesen_a_2; 
10.
int mail_ungelesen_a_3; 
11.
int mail_ungelesen; 
12.
FILE *mail; 
13.
int r=0; 
14.
int n; 
15.
 
16.
int main (void) 
17.
18.
printf("Programm wird gestartet...\n"); 
19.
for ( ; ; ) { 
20.
r++; 
21.
mail = popen("fetchmail -c | grep email1@bla.kecks | cut -c 16-21", "r"); 
22.
while (fgets(mailbuffer, sizeof(mailbuffer)-1, mail) != NULL) { 
23.
	printf("size_t size = strlen(mailbuffer)\n"); 
24.
	size_t size = strlen(mailbuffer); 
25.
	printf("size_t i = 0\n"); 
26.
	size_t i = 0; 
27.
	for ( ; i < size; ++i) { 
28.
		printf("if (mailbuffer[i] == '(') mailbuffer[i] = ' '\n"); 
29.
		if (mailbuffer[i] == '(') mailbuffer[i] = ' '; 
30.
31.
	printf("sscanf (mailbuffer, d ,&mailbuffer_gelesen)\n"); 
32.
	n=1; 
33.
	printf("Runde: %i E-Mail: %i\n", r, n); 
34.
	sscanf (mailbuffer,"%d",&mailbuffer_gelesen); 
35.
36.
 
37.
mail = popen("fetchmail -c | grep email1@bla.kecks | cut -c 1-5", "r"); 
38.
	while (fgets(mailbuffer, sizeof(mailbuffer)-1, mail) != NULL) { 
39.
		printf("sscanf (mailbuffer, d ,&mailbuffer_gesamt)\n"); 
40.
		sscanf (mailbuffer,"%d",&mailbuffer_gesamt); 
41.
42.
printf("%i, %i\n", mailbuffer_gesamt, mailbuffer_gelesen); 
43.
mail_ungelesen_a_1 = mailbuffer_gesamt - mailbuffer_gelesen; 
44.
 
45.
mail = popen("fetchmail -c | grep email2@bla.kecks | cut -c 16-21", "r"); 
46.
while (fgets(mailbuffer, sizeof(mailbuffer)-1, mail) != NULL) { 
47.
	printf("size_t size = strlen(mailbuffer)\n"); 
48.
	size_t size = strlen(mailbuffer); 
49.
	printf("size_t i = 0\n"); 
50.
	size_t i = 0; 
51.
	for ( ; i < size; ++i) { 
52.
		printf("if (mailbuffer[i] == '(') mailbuffer[i] = ' '\n"); 
53.
		if (mailbuffer[i] == '(') mailbuffer[i] = ' '; 
54.
55.
	printf("sscanf (mailbuffer, d ,&mailbuffer_gesamt);\n"); 
56.
	n=2; 
57.
	printf("Runde: %i E-Mail: %i\n", r, n); 
58.
	sscanf (mailbuffer,"%d",&mailbuffer_gelesen); 
59.
60.
 
61.
mail = popen("fetchmail -c | grep email2@bla.kecks | cut -c 1-5", "r"); 
62.
while (fgets(mailbuffer, sizeof(mailbuffer)-1, mail) != NULL) { 
63.
	printf("sscanf (mailbuffer, d ,&mailbuffer_gesamt)\n"); 
64.
	sscanf (mailbuffer,"%d",&mailbuffer_gesamt); 
65.
66.
printf("%i, %i\n", mailbuffer_gesamt, mailbuffer_gelesen); 
67.
mail_ungelesen_a_2 = mailbuffer_gesamt - mailbuffer_gelesen; 
68.
 
69.
mail = popen("fetchmail -c | grep email3@bla.kecks | cut -c 16-21", "r"); 
70.
while (fgets(mailbuffer, sizeof(mailbuffer)-1, mail) != NULL) { 
71.
	printf("size_t size = strlen(mailbuffer)\n"); 
72.
	size_t size = strlen(mailbuffer); 
73.
	printf("size_t i = 0\n"); 
74.
	size_t i = 0; 
75.
	for ( ; i < size; ++i) { 
76.
		printf("if (mailbuffer[i] == '(') mailbuffer[i] = ' '\n"); 
77.
		if (mailbuffer[i] == '(') mailbuffer[i] = ' '; 
78.
79.
	printf("sscanf (mailbuffer, d ,&mailbuffer_gesamt)\n"); 
80.
	n=3; 
81.
	printf("Runde: %i E-Mail: %i\n", r, n); 
82.
	sscanf (mailbuffer,"%d",&mailbuffer_gelesen); 
83.
84.
 
85.
mail = popen("fetchmail -c | grep email3@bla.kecks | cut -c 1-5", "r"); 
86.
while (fgets(mailbuffer, sizeof(mailbuffer)-1, mail) != NULL) { 
87.
	printf("sscanf (mailbuffer, d ,&mailbuffer_gesamt)\n"); 
88.
	sscanf (mailbuffer,"%d",&mailbuffer_gesamt); 
89.
90.
 
91.
printf("pclose(mail)\n"); 
92.
pclose(mail); 
93.
printf("%i, %i\n", mailbuffer_gesamt, mailbuffer_gelesen); 
94.
mail_ungelesen_a_3 = mailbuffer_gesamt - mailbuffer_gelesen; 
95.
mail_ungelesen = mail_ungelesen_a_1 + mail_ungelesen_a_2 + mail_ungelesen_a_3; 
96.
printf("%i + %i + %i = %i\n", mail_ungelesen_a_1, mail_ungelesen_a_2, mail_ungelesen_a_3, mail_ungelesen); 
97.
 
98.
printf("Anzeige der ungelesenen Nachrichten\n"); 
99.
if (mail_ungelesen > 1) { 
100.
	snprintf(new_mail, sizeof(new_mail), "Sie haben %i neue Nachrichten", mail_ungelesen); 
101.
	[...] 
102.
} else if (mail_ungelesen == 1) { 
103.
	snprintf(new_mail, sizeof(new_mail), "Sie haben %i neue Nachricht  ", mail_ungelesen); 
104.
	[...] 
105.
} else { 
106.
	printf("Keine Nachrichten...\n"); 
107.
	[...] 
108.
109.
printf("60 sek. warten...\n"); 
110.
sleep(60); 
111.
printf("auf neue E-Mails ueberpruefen...\n"); 
112.
113.
}
Zur Vervollständigung:
der Aufruf von
01.
fetchmail -c | grep email1@bla.kecks | cut -c 1-5
bzw.
01.
fetchmail -c | grep email1@bla.kecks | cut -c 16-21

ergibt sowas wie
01.
244 N
bzw.
01.
 (244 
Wahrscheinlich ist es nur ein einfaches Anfängerproblem. Ich hoffe mir kann jemand helfen.

Vielen Dank!
Mitglied: dog
14.08.2010 um 20:09 Uhr
Du öffnest pro Durchlauf 6 FILE-Streams aber schließt nur einen...

Und für den Rest gibt es gdb
Bitte warten ..
Mitglied: LayerAcht
14.08.2010 um 20:36 Uhr
achso, ich dachte ich schließe damit alle, da diese ja gleich heißen. Ich versuch es mal.
Danke
Bitte warten ..
Mitglied: LayerAcht
14.08.2010 um 21:45 Uhr
Super. Es hat funktioniert. Manchmal sind es halt die einfachen Dinge im Leben.
Vielen Dank!
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Verzeichnisvergleich funktioniert, Laufzeit aber viel zu lang!

Frage von LetzifyBatch & Shell4 Kommentare

Hallo Leute, ich hatte von meinem Chef die Aufgabe bekommen eine Batch zu programmieren, die eine Verzeichnisstruktur inklusive Dateien ...

Monitoring

Welches Aufgabenlevel hat eine Fault Tree Analyse?

Frage von MarabuntaMonitoring6 Kommentare

Hallo, Zur Frage oben, wer erstellt so eine FTA "normalerweise"? Ist das eine Studentenaufgabe oder zählt das zu einem ...

Festplatten, SSD, Raid

Laufzeit einer Seagate und WD Festplatte

Frage von srx2010Festplatten, SSD, Raid2 Kommentare

Hi, ich habe mir eine Seagate Surveillance und eine WD Red Festplatte gekauft. Jetzt möchte ich mittels eines SATA ...

Festplatten, SSD, Raid

Laufzeit von Festplatten im RAID anzeigen

Frage von 114801Festplatten, SSD, Raid20 Kommentare

Ich möchte gerne wissen, ob es möglich wäre, die Laufzeit einer Festplatte die sich im RAID befindet auszulesen bzw. ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 19 StundenWindows 103 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 22 StundenAdministrator.de Feedback17 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 TagHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 2 TagenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Server-Hardware
Welche Rolle spielt Design bei Enterprise IT Hardware?
Frage von ApolloXServer-Hardware17 Kommentare

Ich arbeite für einen internationalen Elektronikhersteller in der Forschung und meine Aufgabe ist es, Feedback von Nutzern in Hinsicht ...

Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Windows Netzwerk
Backup über WAN
Frage von petereWindows Netzwerk11 Kommentare

Hallo, ich muss aus einem entfernten WAN (synchrone 1Gbit) Daten sichern. Dabei handelt es sich sowohl um wenige große ...