mkdir Windows vs Linux

J'ai un problème lors de portage de Linux l'outil de Windows. J'utilise MinGW sur un système Windows. J'ai une classe qui gère toutes les entrée/sortie et à l'intérieur se trouve cette ligne:

mkdir(strPath.c_str(), 0777); //works on Linux but not on Windows and when it is changed to
_mkdir(strPath.c_str()); //it works on Windows but not on Linux

Les idées de ce que je peux faire, de sorte qu'il fonctionne sur les deux systèmes?

vous pouvez trouver le système qui vous êtes et d'utiliser la bonne. quelque chose comme #ifdef LINUX ... #else ... #endif
Compilation conditionnelle?
Côté: - Vous dire à utiliser 0777, pas 777. Ils sont très différents numéros.
Pourquoi une fonction c standard, conçu pour être portable, besoin d'un conditionnel macro si? N'est-ce pas tout l'intérêt d'avoir de la bibliothèque standard pour ne pas avoir besoin d'utiliser la macro si? Est la bibliothèque standard obsolète? Pourquoi n'avons-nous pas un brillant nouveau standard de la bibliothèque à supplanter les stdio et iostream et répondre aux usecases dans un portable?
mkdir pas un standard C de la fonction. C'est une norme Posix fonction. Les normes de Posix injecter des fonctions dans le runtime C, ce qui techniquement fait les en-têtes non-standard du point de vue de la norme C++. De nombreux unix hébergé par les compilateurs et les bibliothèques correspondantes de choisir de se conformer à la norme Posix, mais Microsoft choisit de se conformer à la norme C++. Donc, pour le sous-ensemble de fonctions Posix qu'ils fournissent, Microsoft ajoute les noms avec un trait de soulignement, faisant d'eux des "réservé pour le compilateur et les responsables de l'implémentation de la bibliothèque" comme la norme C++ permet.

OriginalL'auteur MindlessMaik | 2012-04-27