0

簡単なコードを作成しました:

int main(int argc, char *argv[]) 
{
    struct stat eStat;
    int result;
    struct stat eStat2;
    int result2;

    result = stat("g:/temp/dvd", &eStat);
    printf("result=%d | eStat.st_mode=%d | S_IFMT=%d | S_IFDIR=%d\n",result,eStat.st_mode,S_IFMT,S_IFDIR);

    if((eStat.st_mode & S_IFMT) == S_IFDIR)
        printf("It is a dir!!!\n");
    else
        printf("not a dir\n");

    result2 = stat("g:\\temp\\test.txt", &eStat2); 
    printf("test.txt result2=%d | eStat2.st_mode=%d | S_IFMT=%d | S_IFDIR=%d\n",result2,eStat2.st_mode,S_IFMT,S_IFDIR);

    return 0;
}

そして、このコードをVS2010(Windows7, C++)出力でコンパイルします。

result=0 | eStat.st_mode=16895 | S_IFMT=61440 | S_IFDIR=16384               
It is a dir!!!                    
test.txt result2=0 | eStat2.st_mode=33206 | S_IFMT=61440 | S_IFDIR=16384

Linux(Debian stable, gcc)このコードを出力でコンパイルします。

result=0 | eStat.st_mode=16877 | S_IFMT=61440 | S_IFDIR=16384      
It is a dir!!!                 
test.txt result2=0 | eStat2.st_mode=33188 | S_IFMT=61440 | S_IFDIR=16384  

でコンパイルするとmingw(gcc) on Windows7、次のように出力されます。

result=0 | eStat.st_mode=6 | S_IFMT=61440 | S_IFDIR=16384           
not a dir                
test.txt result2=0 | eStat2.st_mode=6 | S_IFMT=61440 | S_IFDIR=16384

st_modeでコンパイルすると、常に 6 が表示されるのはなぜmingwですか?

4

1 に答える 1