33843386Close
GodzilOn the 2018-02-16 at 05:11pm
Non non non et non.

Zero a raison sur la race condition et ce n'est pas a prendre à la légère.

Mais vous faites tous erreur, vous confondez stat et fstat:

int stat(const char *pathname, struct stat *statbuf);
int fstat(int fd, struct stat *statbuf);

fstat demande d'ouvrir le fichier avant d'en avoir les infos, vous confondez avec stats qui lui prends le nom de fichier.

La ou fstat est contradictoire c'est qu'il est préfixé par "f" alors qu'il ne fait pas partie de la stdlib (fopen/fclose/fread/fwrite/...) mais est dans le domaine de plus bas niveau (open/close/read/write)

Et sans être aussi extrémiste je suis d'accord avec Zero, "modulo de légers ajustements" n'est pas définition de portable, ça veux clairement dire que le code d'appel peux complètement changer d'un système a l'autre (sans compter le contenu de la structure "struct stat" qui je suis sur est très très différente entre Windows et Linux, en plus je ne suis pas sur qu'elle soit clairement définie par POSIX. (structure qui est "struct _stat" sous Windows d'ailleurs, je ne comprends pas pourquoi Microsoft à préfixé ces fonctions/structure..))