C:remove関数は、すべてのファイルを削除しますか?
-
24-09-2019 - |
質問
私はこのようなものを使用しています:
char *file;
file = (char *)malloc(BUFSIZE * sizeof(char));
printf("Enter the filename:");
scanf("%s", file);
if(remove(file)) {
printf("Error while removing");
}
私は2つのファイルを作成します:
touch filetobedeleted1.txt
chmod 777 filetobedeleted1.txt
touch filetobedeleted2.txt
chmod 444 filetobedeleted2.txt
さて、私のプログラムは、両方のファイルを削除しますが、それは右起こると想定されていませんか?誰でもコードが間違っているかを知っている?
EDIT:ファイルに名前を入れるためのコードを追加しました...
[OK]を...それがすべてのように見えますが、ディレクトリに設定された権限に依存しますが、その後のチェックとして使用するファイルのパーミッションする方法はありますか?
解決
は、POSIXファイルシステムのセマンティクスの下では、ファイルを削除するために使用パーミッションチェックを使用すると、ファイルが入っていることをディレクトリに書き込むことができるかどうかです。 のないのあなたはファイルそのものます。
上の書き込み権限を持っているかどうか(ディレクトリはスティッキービットがセットされている場合、あなたはまた、ファイルの所有者でなければなりません - /tmp
はこれを使用しています)。
他のヒント
のみディレクトリへの書き込みアクセスが必要なファイルを削除します。
は厳密に言えば、何を削除しているのは、ファイルへの参照、ハードリンクです。ファイルへのすべてのリンクがなくなるまで、ファイル自体は削除されません。
rmコマンドでそれを試してみてください!
remove()
のみの親のディレクトリへの書き込み権限を必要としていること、およびunlink()
によると、man 2 unlink
を呼び出します。
あなたはgetumask()
機能を使用してremove()
を呼び出す前に、それをチェックを与えることができます。
所属していません StackOverflow