2016-04-25 13 views
0

Ich probiere einige Möglichkeiten aus, um die TLB-Größe auf meiner Maschine zu messen. Ich musste irgendwie sicherstellen, dass die CPU die Elemente des Arrays, die ich verwende, um die durchschnittliche Zugriffszeit pro Seite zu messen, nicht zwischenspeichert. Also habe ich versucht, diesen Code in der Schleife, die ich habe, mit der Antwort über here:Segmentierungsfehler (Core Dumped) Fehler beim Versuch, Cache zu leeren

FILE *fp; 
fp = fopen("/proc/sys/vm/drop_caches", "w"); 
fprintf(fp, "3"); 
fclose(fp); 

Ich bin jedoch die Segmentation Fault (core dumped) Fehler. Ich habe keine Ahnung, warum das passieren könnte. Ich bin nicht sehr gut mit C und jede Hilfe würde geschätzt werden. Vielen Dank.

+1

Wenn Sie 'fopen()' aufrufen, überprüfen Sie immer (! = NULL), um sicherzustellen, dass die Operation erfolgreich war. Höchstwahrscheinlich muss das Programm vom 'root'-Modus (Administrator) aus ausgeführt werden, andernfalls wird ein Schreibzugriff mit fehlgeschlagen. – user3629249

Antwort

6

Vergewissern Sie sich, dass das Öffnen der Datei erfolgreich war, da Sie in eine Systemdatei schreiben, die Sie im privilegierten Modus ausführen müssen.

+0

Vielen Dank für die Antwort. Ich habe das gerade versucht, und es scheint Fehler 13 zu geben (könnten Sie bitte die% s korrigieren, ich denke, es sollte% d sein, weil es sonst den Datentypfehler gibt). Also habe ich danach "sudo su" versucht und versucht, die .c Datei im root auszuführen. Aber jetzt scheint es für immer weiterzugehen. Wie in der Ausgabe kommt nicht auf dem Terminal heraus. Oder in einer Datei. Obwohl, wenn ich die Befehle im Root-Modus ausführe, scheinen sie zu funktionieren. Oder gib wenigstens keine Fehler. Ich habe auch versucht, die Befehle mit dem Aufruf von system() auszuführen. Aber das scheint auch nicht zu funktionieren. – QPTR

+0

errno 13 ist EACCESS, das heißt, Sie haben keine Schreibberechtigung für die Datei, also können Sie su rooten oder das Programm mit sudo ausführen. Können Sie genauer auf welches Problem haben Sie jetzt? – fluter

+0

Im Grunde, wenn ich jetzt versuche, das Programm auszuführen (im privilegierten Modus mit 'sudo su'), läuft es nur auf dem Terminal, ohne dass es ein Ende gibt. Es scheint kein Problem mit meinem Code zu sein, denn ohne zu versuchen, den Cache zu leeren (oder den obigen Code einzuschließen), scheint er in Ordnung zu sein (das gibt die Zeiten auf dem Terminal aus, wie es sein sollte). – QPTR

Verwandte Themen