Dort lese ich im Manual bei der Funktion fopen Folgendes:
Eine Liste der möglichen Modi von fopen() mittels mode [...] und dort dann bei mehreren Modi den Satz "Existiert die Datei nicht, versuche, diese zu erzeugen."
Meine Frage: Wenn ich eine leere Datei example.txt einfach nur erzeugen möchte, also _weder_ eine Lese-, _noch_ eine Schreiberechtigung setzen möchte, was bietet sich da als Alternative zu fopen() an?
Du (und die beiden anderen) verwechselst die Lese- und Schreibberechtigung, kurz: die Zugriffsrechte, mit den Arbeitsmodi von fopen().
Unter Lese- und Schreibrechten versteht man, welcher Benutzer des Systems eine Datei auslesen oder beschreiben kann. Damit hat fopen() nichts zu tun, das ist Sache von chmod(). chmod() kann (unter anderem) eine Datei vor dem versehentlichen Beschreiben schützen oder verhindern, dass Fremde eine Datei auslesen. Das versteht man unter Rechten bzw. der Berechtigung.
Der Parameter mode von fopen() hingegen bestimmt lediglich, wie du selbst _jetzt gerade_ auf die Datei zugreifen möchtest. Wenn du beispielsweise lediglich etwas aus der Datei lesen möchtest, benutzt du "r" als Modus.
Mit dem _Setzen_ von Lese- und Schreibrechten hat das nichts zu tun! Du musst fopen() aber einen Arbeitsmodus übergeben, weil es ja durchaus sein kann, dass eine Datei schreibgeschützt ist. Mit einem lesenden fopen() kannst du diese Datei öffnen, ein schreibendes fopen() wird hingegen fehlschlagen. Es kann andersrum auch sein, dass eine Datei lesegeschützt ist, die kannst du dann nur mit schreibendem fopen() öffnen.
Also: Bitte Zugriffsrechte und Öffnungsmodus nicht verwechseln!
Ich hatte gehofft, dass ich im Manual unter all den Funktonen so etwas wie "erstellt eine Datei ohne Inhalt" finde, leider ergebnislos.
Dateien werden immer ohne Inhalt, d.h. mit der Länge 0 erstellt.
Überlege doch mal: Was sollte denn in einer niegelnagelneuen Datei drinstehen? Das Betriebsystem kann sich doch nicht ein paar Megabyte aus den Fingern saugen und dir vor die Füße kippen. Eine neue Datei ist _immer_ leer.
Heiß das, ich _muss_ mit fopen() arbeiten, wenn ich eine leere txt-Datei erstellen möchte, auch, wenn ich zu diesem Zeitpznkt weder etwas Lesen, noch etwas Schreiben möchte?
Du kannst, aber du musst nicht. Du kannst mit fopen() eine leere Datei erstellen; betrachte das Erstellen einfach als schreibenden Zugriff und wähle entsprechend w, a, x oder c als fopen()-Modus, je nachdem, wie du mit einer möglicherweise existierenden Datei desselben Namens umgehen möchtest.
Falls es dir aber wirklich nur darum geht, dass eine Datei überhaupt vorhanden ist, verwende statt fopen() besser den einfacheren Aufruf von touch().
Mit fopen() geöffnete Dateien müssen eigentlich mit fclose() wieder geschlossen werden, zusätzlich musst du, wie oben beschrieben, den Arbeitsmodus wählen. Bei touch() ist das alles nicht nötig, der Aufruf ist also mit weniger Aufwand verbunden.
Andererseits sorgt touch() nicht dafür, dass die Datei leer ist, sowas erreichst du nur mit fopen() und mode="w". Sollte die Datei also bereits existieren und beschrieben sein, könntest du irgendwann mit Datenmüll dastehen, weil du immer davon ausgegangen bist, dass die Datei leer ist.
Nochmal kurz:
- Datei soll existieren und _muss_ leer sein: fopen(), mode="w".
- Datei soll existieren und kann leer oder auch schon beschrieben sein: touch().