我正在从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_IRWXG
或S_IRWXO
?
我发现了一些在Windows上定义它们的代码:
#define S_IRWXG (S_IRWXU >> 3)
#define S_IRWXO (S_IRWXG >> 3)
这看起来像是一个容易破坏的kludge,是否有更好的方法来获取这些定义?我不想使用Cygwin。
答案 0 :(得分:2)
S_IRWXG和S_IRWXO对于Linux是实际的,在Windows上你不需要它们, 您可以从Linux获得的值
答案 1 :(得分:1)
Windows XP在其文件系统中没有概念组和其他权限,因此,未定义这些宏。