0

ファイルからの基本的なファイル許可と、入力からのファイル許可を比較する必要があります。入力は に保存する必要がargv[1]あり、ファイルからの許可情報は従来のstruct stat stat_buf、具体的にはstat_buf.st_modeフィールドに保存されます。

実行例は./program 775. 次に、プログラムは、それがコード内の一部のファイルの同じ許可であると言う必要がありstat_buf.st_modeます。しかし、私が知っていることはst_mode、8 進数として読み取ったり、int に変換したりする必要があるため、 の形式は扱いにくいということです。問題なく比較するには?

4

2 に答える 2

1

私のアプローチは、を受け取る関数octstat_buf.st_mode作成し、それを 8 進モードでバッファーにコピーし、それを別のバッファーにコピーして、不要な情報 (最初の 3 つの数字) を削除し、最後にstrtol関数を使用して取得することでした。入力と比較するための 10 進数の数値。

int oct(mode_t num) {
    int i;
    char buffer[7], buffer2[4];
    snprintf(buffer, 8, "%o", num);
    for(i = 0; i < strlen(buffer2); i++)
        buffer2[i] = buffer[i + 2];
    return strtol(buffer2, NULL, 10);
}

そして、これをテストする方法:

int main() {
    int mode1, mode2;
    struct stat stat_buf;
    stat("/home/user/myfile", &stat_buf);
    mode1 = atoi(argv[1]);
    mode2 = oct(stat_buf.st_mode);
    printf("%d %d\n", mode1, mode2);
    return 0;
}

例: を実行する./program 775と、出力として得られます775 775

于 2013-11-01T17:12:14.620 に答える