質問

私はこのようなものを使用しています:

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()を呼び出す前に、それをチェックを与えることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top