2016-09-26 4 views
2

私は10年以上GNU/Linuxを使用してきました。cプログラム:書き込み権限のないファイルを削除()する理由

次のコードをテストするために、私は 'undo_path'に 'chmod -w'を使用しました。次に、ls -alを使用してファイルに書き込み権限がないことを確認しました。それは示した:

-r - Rを - r--の1アンディアンディ52 9月26日午後06時17分lastrmw

私は、コードを試してみました。 2倍。両方ともremove()ステートメントが成功しました。

if (remove (undo_path)) 
{ 
    fprintf (stderr, "Warning: failed to remove %s\n", undo_path); 
    perror (__func__); 
} 

書き込み権限のないファイルはどのように削除できますか?

私は、Debian 8 /ジェシー、そして私のカーネル使用しています。Linux 3.16.0-4-amd64の#1 SMPのDebian 3.16.36-1 + deb8u1(2016年9月3日)x86_64のGNU/Linuxの

オシアナスを
+1

ファイルのアクセス許可はファイルの* contents *に関係します。 –

+0

もう一度考えてみましょう。おそらく、問題のファイル名自体がコンテンツの一部である他の種類のファイルがありますか? –

+0

ありがとう、@ KerrekSB、ファイルにrmを使用すると、削除される前に削除するよう求めるプロンプトが表示されます。面白いことに、私はそれを前に気づかなかった。 – andy5995

答えて

2

remove機能は、ディレクトリからエントリを削除する操作です。 ファイルがファイルシステムによって自動的に削除される条件を生成しない限り、ファイルを削除します。たとえば、同じファイルに2つの対応するディレクトリエントリがある場合、またはプロセスによって開かれている場合、そのファイルは削除されません。

2

remove()はディレクトリで動作するため、ファイルではなくフォルダに対する書き込み権限がない場合にのみ機能します。

1

ファイルを削除するとは、ディレクトリエントリを削除することを意味します。ディレクトリエントリの削除(および作成)は、ディスク上の格納ディレクトリのブロックに影響を与えますが、削除されるファイルによって使用されるブロックは影響を受けません。実際、ファイルへの複数の参照(ハードリンク)がある場合、ファイルブロックは解放されないこともあります。したがって、ファイルのチェックではなく、ディレクトリの書き込み権限が含まれています。

関連する問題