2012-11-27 554 views
1

我將一些軟件移植到Unix上的Window,並在Windows XP SP3上使用g ++ v4.7。我有一個頭文件中的聲明看起來像這樣:爲什麼在Windows的sys/types.h中沒有定義S_IRWXG和S_IRWXO?

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

+0

每本:HTTP://msdn.microsoft.com/en-us/library /14h5k7ff(v=vs.80).aspx窗口仍然有一個sys/stat.h,所以#include 將添加那些缺少的宏。 –

+1

如上所示,我已經包括''。我也試着在它上面加上'',但這沒有幫助。也許我錯過了一些-D預處理器標誌來定義它們? – WilliamKF

回答

2

S_IRWXG和S_IRWXO是實際的Linux,Windows上你不需要他們, 值用戶可於Linux的

得到
1

Windows XP在其文件系統中沒有概念組和其他權限,因此這些宏未定義。

相關問題