Hallo,
Warum willst Du denn den String zusammensetzen?
Um einen Dateinamen zu bekommen, der Unique ist.
Aha. Und dafür dieser Riesenaufwand?
Nein, das brauchst Du nicht mehr. Der Wert des Pointers selber ist hier
individuell.
Ehm, wovon redest du eigentlich? Kann das sein, dass wir aneinander vorbei
reden?
Das ist durchaus möglich ;-)
Ich bin mir nicht sicher, ob ich verstanden habe, was Du geschrieben hast. Ich hab das ganze auch nur mehr oder weniger ueberflogen. Ein Posting vorher sah es fuer mich noch so aus, wie wenn Du vorschlaegst, den Wert eines Pointers (auf int gecastet)
(Wenn dann: unsigned int ;-)
zur Bildung eines system-global eindeutigen Dateinamens heranzuziehen.
Das geht natürlich nicht. Der wäre dann nur lokal und nur at Runtime einmalig.
In diesem Posting sieht's aber nicht mehr so aus, wie wenn Du diese Idee verfolgst. Hattest Du das nun so gemeint oder nicht?
Da er die URIs abbildet, also im Cache Verzeichniss am Ende der Verzeichnisbaum abgebildet ist, sind die Dateinamen eh eindeutig (sind ja erstens nur statische Seiten und zweitens kann das durchaus bei komplizierten Pfadumbauten seitens des Apachen auch in die Hose gehen ;-).
Also reicht rein theoretisch auch ein stinknormales Präfix, da fest sein darf und per sprintf() o.ä. vorgehangen wird.
Bei EEXIST evt halt noch mehrmals, sollte aber nur bei besonders bösen Pfadumbauten vom Apachen vorkommen, wenn überhaupt.
Ist aber auch nichts halbes und nichts ganzes. Würde den komprimierten String in Memory halten, senden und dann erst in eine Datei schreiben.
Das verhindert auch Synchronisationsprobleme und ist schnell.
Globale, ja selbst nur lokale eindeutige Dateinamen zu finden ist schwierig. Da sollte eigentlich tmpfile() bzw tmpname() für einspringen. Die sind aber laut ISO nur für mindestens 25 Datei(nam)en (TMP_MAX) garantiert und haben hin und wieder Bugs in den Implementationen.
Das eigentliche Problem ist ja das nicht ANSI konforme getpid().
Ließe sich höchstens bei Fallenlassen der ANSI Kompatibilität durch einen Test auf POSIX begründen.
#ifndef __STRICT_ANSI /* GCC schaltet das ein, wenn -ansi gefordert wird */
#ifdef _POSIX_SOURCE
getpid()
#endif
#else
tmpname()
#endif
so short
Christoph Zurnieden