Я портирую программное обеспечение на Windows из Unix и использую g ++ v4.7 в Windows XP SP3. У меня есть объявление файла заголовка, которое выглядит так:
#include <string>
#include <sys/types.h>
using namespace std;
bool MakeDir(const string &dirName,
mode_t mode =S_IRWXU | S_IRWXG | S_IRWXO);
Но когда я его компилирую, я получаю эту ошибку:
FileName.h:35:40: error: 'S_IRWXG' was not declared in this scope
FileName.h:35:50: error: 'S_IRWXO' was not declared in this scope
Почему бы sys/types.h
определять S_IRWXU
но нет S_IRWXG
ни S_IRWXO
?
Я нашел некоторый код, который определяет их в Windows следующим образом:
#define S_IRWXG (S_IRWXU >> 3)
#define S_IRWXO (S_IRWXG >> 3)
Это похоже на клочок и склонность к разрушению, есть ли лучший способ получить определения для них? Я не хочу использовать Cygwin.
S_IRWXG и S_IRWXO актуальны для Linux, в Windows они вам не нужны,
значения, которые вы можете просто получить из Linux
Windows XP не имеет концептуальной группы и других разрешений в своей файловой системе, поэтому эти макросы не определены.