1

投稿592448に示されているコード例を使用して、完全なファイル許可を付与しようとしています。次を使用してコードスニペットをコンパイルすると:

 gcc -shared -mno-cygwin -Wall -o native.dll native.c

以下のエラーが発生します。

native.c:8: error: conflicting types for 'mode_t'
/usr/i686-pc-mingw32/sys-root/mingw/include/sys/types.h:99: error: previous declaration of 'mode_t' was here
native.c:21: error: parse error before numeric constant
native.c:22: error: parse error before numeric constant
native.c:23: error: parse error before numeric constant
native.c:25: error: parse error before "mode_t"
native.c:26: error: parse error before "mode_t"
native.c:28: error: parse error before "mode_t"
native.c:29: error: parse error before "mode_t"

コードを削除して以下に縮小しました。これは正常にコンパイルされますが、必要に応じてファイルのアクセス許可を変更していないようです。

#include <sys/stat.h>
#include <sys/types.h>
#include <errno.h>

#ifdef _WIN32
#   include <io.h>

typedef signed int md_t;
static const md_t MS_MODE_MASK = 0x0000ffff;           ///< low word

int fchmod(const char * path, md_t mode)
{
    int result = _chmod(path, (mode & MS_MODE_MASK));

    if (result != 0)
    {
        result = errno;
    }

    return (result);
}
#else
int fchmod(const char * path, md_t mode)
{
    int result = chmod(path, mode);

    if (result != 0)
    {
        result = errno;
    }

    return (result);
}
#endif

これを機能させる方法についての指針はありますか?

4

1 に答える 1

1

Windows では、これができることは、ファイルを読み取り専用に設定するかどうかだけであることに注意してください。Windows のファイル許可は、UNIX タイプのファイル許可とは異なります。

これがあなたがやりたいことのすべてである場合:どのように機能していませんか?

EDIT:あなたがmode_t他の場所で定義した初期エラーに関して:/usr/i686-pc-mingw32/sys-root/mingw/include/sys/types.h:99そしてそれを次のように再定義しようとしましたtypedef int mode_t;

MSDNから:

書き込み権限が与えられていない場合、ファイルは読み取り専用になります。すべてのファイルは常に読み取り可能であることに注意してください。書き込みのみの許可を与えることはできません。したがって、モード _S_IWRITE および _S_IREAD | _S_IWRITE は同等です。

于 2012-05-04T11:05:48.670 に答える