Méthode multi-plateforme de création d’un dossier / répertoire?

Existe-t-il un moyen de créer un dossier / répertoire “en code” en utilisant C, qui est multi-plateforme? Ou devrais-je utiliser le préprocesseur pour indiquer la méthode à utiliser?

Vous aurez besoin d’un #define pour le faire.

Pour que votre code rest propre, vous devez en utiliser un qui définira la fonction Linux à traduire dans la fonction Windows équivalente lors de la compilation pour Windows.

En haut de votre fichier source, vous aurez ceci dans une section spécifique à Windows:

 #include  #define mkdir(dir, mode) _mkdir(dir) 

Ensuite, vous pouvez appeler la fonction comme ceci:

 mkdir("/tmp/mydir", 0755); 

Voici quelques autres qui pourraient être utiles:

 #define open(name, ...) _open(name, __VA_ARGS__) #define read(fd, buf, count) _read(fd, buf, count) #define close(fd) _close(fd) #define write(fd, buf, count) _write(fd, buf, count) #define dup2(fd1, fd2) _dup2(fd1, fd2) #define unlink(file) _unlink(file) #define rmdir(dir) _rmdir(dir) #define getpid() _getpid() #define usleep(t) Sleep((t)/1000) #define sleep(t) Sleep((t)*1000) 

Existe-t-il un moyen de créer un dossier / répertoire “en code” en utilisant C, qui est multi-plateforme?

Non. Le langage C et la bibliothèque standard n’ont aucun concept de répertoire. Il existe des fonctions de bibliothèque standard, notamment fopen() , qui consumnt des noms de fichiers, ce concept subsume des chemins (et donc des répertoires), mais la norme spécifie :

Les fonctions qui ouvrent des fichiers supplémentaires (non temporaires) nécessitent un nom de fichier, qui est une chaîne. Les règles de composition des noms de fichiers valides sont définies par l’implémentation .

(C2011 7.21.3 / 8; italiques ajoutés)

Je sais que cela ne concerne pas directement la question, mais il est difficile de prouver un point négatif, et surtout de le faire de manière concise. J’insiste sur le fait que le standard de langage ne sait même pas que des répertoires existent, avant de vous assurer que, en particulier, il n’a aucun support pour les créer.

Ou devrais-je utiliser le préprocesseur pour indiquer la méthode à utiliser?

Ce serait une façon conventionnelle de procéder. Vous pouvez mettre en œuvre les détails de plusieurs manières.