次の簡単なプログラムがあります。
#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 に設定する必要があります。ターミナルからアプリケーションをコンパイル/実行していますが、どのような権限も持っていません。作成されたファイルが管理者にしか見えないのはなぜですか?