为什么Windows上的sys / types.h中没有定义S_IRWXG和S_IRWXO?

时间:2012-11-27 00:30:04

标签: c++ unix windows-xp porting systypes.h

我正在从Unix移植一些软件到Window,并在Windows XP SP3上使用g ++ v4.7。我有一个头文件声明,如下所示:

#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_IRWXGS_IRWXO

我发现了一些在Windows上定义它们的代码:

#define S_IRWXG (S_IRWXU >> 3)
#define S_IRWXO (S_IRWXG >> 3)

这看起来像是一个容易破坏的kludge,是否有更好的方法来获取这些定义?我不想使用Cygwin。

2 个答案:

答案 0 :(得分:2)

S_IRWXG和S_IRWXO对于Linux是实际的,在Windows上你不需要它们, 您可以从Linux获得的值

答案 1 :(得分:1)

Windows XP在其文件系统中没有概念组和其他权限,因此,未定义这些宏。