open() システムコールについて質問があります。読み取り専用モードで提供されたディレクトリ内のすべてのファイルを開く必要があるCコードを書いています。公開通話の前に、ユーザーがファイルに対する読み取り権限を持っていることを確認してください。指定されたディレクトリがあると、/
その中のファイルをswapfile
開くことができず、システムコールが失敗した場合でも、ユーザーには読み取り権限があります。
なぜこれが起こるのか、または解決策を教えてください。
以下に示すように、ユーザーに読み取り権限があるため、ファイルを開いている必要があります。
-rw------- 1 root root 2147483648 Οκτ 22 18:58 swapfile
エラーを引き起こすコード:
int fd = open(path, O_RDONLY);
if (fd == -1)
{
perror("open");
exit(1);
}
間違い:
open: Permission denied
答え1
root以外のユーザーとしてファイルを開こうとしています。
ファイル権限を使用すると、ファイル所有者はファイルを読み書きするために開くことができ、グループや「その他」へのあらゆる種類のアクセスを拒否できます。これがls -l
出力に表示される内容です。
ファイルの所有者はrootで、rootではなくユーザーとしてコードを実行しています。これが「許可拒否」エラーが発生する理由です。