1

次の簡単なプログラムがあります。

#include <iostream>
#include <fcntl.h>
#include <unistd.h>
#include <string>

using namespace std;

int main() {
    string data { "The quick brown fox jumps over the lazy dog" };

    int file_descriptor = open("some_file.txt", O_CREAT | O_WRONLY);
    write(file_descriptor, data.c_str(), data.size());

    cout << file_descriptor << endl;
    return 0;
}

ほとんどの場合、これで問題なく動作します。データはファイルに出力されます。しかしhttp://linux.die.net/man/2/openによると、O_CREATフラグはファイル所有者をプロセスの実効ユーザー ID に設定する必要があります。ターミナルからアプリケーションをコンパイル/実行していますが、どのような権限も持っていません。作成されたファイルが管理者にしか見えないのはなぜですか?

4

1 に答える 1

11

たまたまのミス。を使用する場合O_CREATopen()は 3 引数の関数で、ファイル モードを 3 番目の引数として受け取ります。

以下を使用する必要があります。

int fd = open("some_file.txt", O_CREATE | O_WRONLY, 0444);

これにより、誰にも書き込み権限のないファイルが作成されます (ただし、プロセスは書き込み可能になります)。

<sys/stat.h>の代わりに使用する POSIX 記号定数の詳細については、を参照してください0444

于 2013-09-20T20:36:19.953 に答える