Weil der von mir gegebene Code immer die Datei mit dem Namen "datei" anlegt (wobei man die Datei vorher selbst anlegen sollte, wenn man sysopen ohne O_CREAT verwendet), habe ich den Code immer mit /tmp als Arbeitsverzeichnis laufen lassen. Einmal habe ich vergessen, "cd /tmp" zu machen und somit lief er im Home-Verzeichnis. Dreimal duerft Ihr raten, was ich rausgefunden habe: Im Home-Verzeichnis gibt es reproduzierbar
deutlich andere Ergebnisse als in /tmp! (Man muss erwaehnen, dass /home bei mir ext3 ist und /tmp ist tmpfs.)
Die Ergebnisse in /tmp sind immer ungefaehr wie oben (54 fuer sysopen, 58 fuer open), in ~ sind sie hingegen immer ungefaehr 54 fuer sysopen, 70 fuer open.
Ferner habe ich noch probiert, was passiert, wenn man bei sysopen nicht nur O_WRONLY sondern O_WRONLY|O_CREAT|O_TRUNC angibt (das ist genau das, was open auch macht, siehe strace). Das Ergebnis ist erschuetternd: Nun braucht sysopen länger als open! Circa 65 Sekunden fuer 5000000 Durchläufe auf tmpfs und ca. 80 auf ext3.
Hier noch einmal als Uebersicht:
| ext3 | tmpfs
=======================================================
open | 70 | 58
sysopen (O_WRONLY) | 54 | 54
sysopen (O_WRONLY|O_CREAT|O_TRUNC) | 80 | 65
Was mich vor allem wundert, ist, dass der Unterschied zwischen open und sysopen(O_WRONLY|O_CREAT|O_TRUNC) sich je nach Dateisystem unterschiedlich stark äußert. Ein Blick in strace zeigt naemlich beide Male dieselben System-Calls, und außerhalb von System-Calls sollte sich das Dateisystem eigentlich nicht auswirken...
Ich bin jetzt etwas zu muede, um weiter zu experimentieren.\n\n
<!--EDIT|betterworld|1145410044-->