2

私はいくつかのソフトウェアをUnixからWindowに移植しており、WindowsXPSP3で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)

これは応急修理のようで壊れがちですが、これらの定義を取得するためのより良い方法はありますか?Cygwinは使いたくない。

4

2 に答える 2

3

S_IRWXGとS_IRWXOはLinuxの場合は実際のものであり、Windowsの場合は必要ありません。値は、Linuxから取得できます。

于 2015-05-14T15:43:30.120 に答える
1

Windows XPのファイルシステムにはコンセプトグループやその他のアクセス許可がないため、これらのマクロは定義されていません。

于 2012-12-02T13:58:00.303 に答える