Je cours Ubuntu 16.04 avec la version de noyau 4.8.0 et la version 2.23 de glibc. Lorsque j'exécute open
avec les indicateurs O_DIRECTORY
et O_CREAT
et que le répertoire n'existe pas, un fichier normal est créé à la place d'un répertoire. Quelles solutions existent pour corriger ce comportement non intuitif?Comportement non-intuitif d'ouvrir avec des drapeaux DIRECTORY et O_CREAT
1
A
Répondre
3
Quand je comprends la page de manuel de open
correctement la combinaison de O_DIRECTORY
et O_CREAT
ne vise pas:
O_DIRECTORY
devrait échouer si le nom de fichier ne spécifie pas un répertoire. J'interprète "un répertoire" comme "un répertoire existant" ici. Vous pouvez d'abord utiliser mkdir
en premier. mkdir
retournera un code d'erreur si le répertoire existe déjà. Vous ignorez simplement la valeur renvoyée par mkdir
. Ensuite, vous ouvrez le fichier avec O_DIRECTORY
:
mkdir(the_file_name, your_desired_mode);
f = open(the_file_name, O_DIRECTORY);
Donc, il y a une erreur dans la mise en œuvre de 'open', car il ne retourne pas d'erreur pour signaler une mauvaise combinaison d'arguments. – user3368561