8

ディレクトリを作成する単純な C プログラム (mkdir クローン) を作成しようとしています。これは私がこれまでに持っているものです:

#include <stdlib.h>
#include <sys/stat.h> // mkdir
#include <stdio.h> // perror

mode_t getumask()
{
    mode_t mask = umask(0);
    umask (mask);
    return mask;
}

int main(int argc, const char *argv[])
{
    mode_t mask = getumask();
    printf("%i",mask);

    if (mkdir("trial",mask) == -1) {
        perror(argv[0]);
        exit(EXIT_FAILURE);
    }
    return 0;
}

このコードはディレクトリを作成しますが、mkdirのようd---------に作成したいdrwxr-xr-xですか? ここで何が間違っていますか?

4

3 に答える 3

12

あなたは何のために使われているのか誤解しているようですumask。プロセスのファイルモード作成マスクを設定/取得します。このマスクは、次のような呼び出しで指定したファイルモードのビットをオフmkdirにするために使用されます(pseduo-code)。

real_mode = requested_mode & ~umask

したがって、コードでは、umask自体の値を渡すため、パーミッションをゼロとして指定することになります。これは、まさに表示されているとおりです。

代わりに、次のように、呼び出しで必要な権限を指定する必要がありますmkdir

mkdir("trial", 0755)
于 2012-04-13T21:01:24.947 に答える
2

エリックが言うように、umaskはあなたが得る実際の許可モードを補完するものです。したがって、マスク自体をに渡す代わりに、に渡すmkdir()必要があり0777-maskますmkdir()

于 2012-04-13T21:08:09.903 に答える