Moin,
Überprüfen Sie bitte Ihre Mitteilung! Sie ist zu lang (maximal 12288 Zeichen).
Ja sowas!
Hoehoe ;-) Fass dich halt kuerzer *g*
Also, ANSI C bietet an:
7.19.4.1 The remove function
Synopsis
1 #include <stdio.h>
int remove(const char *filename);
Ah. Sehr cool, danke.
Ist ja nur noch getpid()
Ein eindeutiges Merkmal gibt es z.B. mit tmpnam() bzw tmpfile()
Oh, kannte ich auch noch nicht. Mal sehen, was die man-Page sagt:
BUGS
These interfaces are provided for System V and ANSI compatibility only.
The mkstemp(3) interface is strongly preferred.
There are four important problems with these interfaces (as well as with
the historic mktemp(3) interface). First, there is an obvious race
between file name selection and file creation and deletion. Second, most
historic implementations provide only a limited number of possible tempo-
rary file names (usually 26) before file names will start being recycled.
Third, the System V implementations of these functions (and of mktemp(3))
use the access(2) function to determine whether or not the temporary file
may be created. This has obvious ramifications for setuid or setgid pro-
grams, complicating the portable use of these interfaces in such pro-
grams. Finally, there is no specification of the permissions with which
the temporary files are created. [...]
Vor allen Dingen der erste Punkt macht mich stutzig; eine race condition kann
ich echt nicht brauchen. Weisst du naeheres darueber?
Kannst Dein malloc() an den meisten Stellen eh ganz weglassen.
Sicher, aber dann muesste ich mit festen Groessen arbeiten (Arrays), und
das moechte ich moeglichst vermeiden. So kann ich die Groesse ziemlich
genau bestimmen.
Nein, warum? Pointer reichen. Damit kann auch keine Ärger mit der Größe
auftauchen.
Bitte was?
Entschuldige, aber wie soll ich hier sonst einen String zusammensetzen? ;-)
und weder strcpy() noch strcat() sind eigentlich zu empfehlen.
Warum?
strcpy() weil in Deinem Fall tempfile = cfile (+ der danach notwendigen
Änderungen) besser gewesen wäre, hätte auch die Speicherallokation
gespart. (Nur die Adresse wird kopiert)
Aber dann haette ich die Zahl wieder hinten dran gehabt, und auch haette
ich das Problem, dass evntl. die Laenge zu gross wird.
Wieso kann die Länge zu groß werden? Sind doch nur Zeiger. Im Normalfall
decken die die ersten 4GB auf jeden Fall ab. Sind sogar individuell, da
sparst Du Dir noch das getpid().
Naa. Ich meinte, die Groesse des Speicherfeldes koennte zu kein sein fuer ein
getpid() und den Namen davor.
Dann schreib das doch einfach ;-)
'\0' sind drei Buchstaben mehr *jammer* ;-)
Und ich dachte, ich wäre faul ;-)
Na hoer mal, ob ich '\0' tippe (Shift+#, Alt GR+ß, 0, Shift+#) oder ob ich nur
0 tippe, das ist ein grosser Unterschied ;-)
ANSI C sagt ja nur:
(stddef.h)
NULL which expands to an implementation-defined null pointer constant
In stddef.h steht dann auf meiner Maschine:
#define NULL ((void *)0)
Na gut. Solange das im Ergebnis einen falschen Ausdruck gibt (also einen
Ausdruck, der false ergibt), kann das meinetwegen eine Warnung geben.
(Eigentlich darf time() da keine Probleme machen. Ist meine Libc wirklich
so kaputt?)
Was fingerst du da auch drin rum? ;-)
Welches System eigentlich?
Och nö, geht mittlerweile. Arbeitet sauber.
Wenn der Code auch sauber ist! ,-)
Mittlerweile heisst?
[...]
Such Dir was aus, sind alle dort beschrieben ;-)
Ja, danke, das hab ich verdient. ;-)
Wieso?
Zugegeben, es mag vielleicht keine Loesung im C-Style sein. Aber sie ist
doch einfach und elegant?
Mpfffff...
Öh ...
Klarer Fall von Perl2C ;-)
Hoe?
Nein, mal im ernst, was hast du fuer Probleme mit der Loesung?
Reicht das denn nicht "at compile time"?
Mich ärgern hardcompiled paths ja auch unsäglich, aber hier?
Na, aber wie soll ich dann vorkompilierte Binaries anbieten? Waere ja geradezu
sinnlos.
Nein, ausnahmsweise richtig ;-)
[...]
Man, man, man. Ich habe noch gelernt, es gibt nur 0 (false) oder
ungleich 0 (true) und erst mit C++ sei bool eingefuehrt worden.
Gibt es einen Switch, der alle Warnungen ausgibt?
Nein, leider nicht. Mußt Du zusammenbauen, oder einen C Lint benutzen, z.B.
splint http://www.splint.org mit der Option -strict.
Danke.
Aber tu Dir das bloß nicht an! ;-)
Ich glaub, ich hab das oefter mal noetig ;-)
Warum meinst Du eigentlich, das eine PID bis zu 1024 Stellen haben
kann? Nur so als Frage ;-)
Wer sagt, dass ich das meine? ;-)
Ich verwende 'buff' noch etwas spaeter, als fread()-Buffer.
Wie ich schon weiter oben erwähnte:
Jaja, typisch perl2C ;-)
Hae? Erklaren Sie sich! ;-)
BTW:
stdio.h
- Macro: int BUFSIZ
[...]
Ja, ich weiss. Aber ich finde 1k-Bloecke irgendwie schoener ;-)
Gruesse,
CK