0

unlink()を使用して削除できるファイルを予測しようとしています。

これまでの私の理解では、ファイルは他のユーザーに書き込み可能であるか、実行中のプログラムと同じグループIDまたは所有者IDを持っている必要があります。

他にケースはありますか?私はこれらのファイルが私のプログラムによってどのように削除可能であるかを説明しようとしています(プログラムはrootとしてもadminグループでも実行されていません)。

drwxrwxr-x  4 root  admin    136 Apr 17 23:53 .
drwxrwxr-x  7 root  admin    238 Jan 27 11:49 ..
-rwxrwxr-x  1 root  admin    560 Jan 27 11:49 info.nib
-rwxrwxr-x  1 root  admin  18399 Jan 27 11:49 keyedobjects.nib

ありがとう!

4

4 に答える 4

3

実際、重要なのはディレクトリの権限です

于 2012-04-18T07:02:41.240 に答える
1

もう1つのケースは、別のプロセスに、削除するファイルがまだ開いている場合です。のマニュアルページからunlink

EBUSY

ファイルパス名は、システムまたは別のプロセスによって使用されているため、リンクを解除できません。たとえば、マウントポイントであるか、NFSクライアントソフトウェアがアクティブであるが名前のないiノード(「NFSの愚かな名前の変更」)を表すために作成しました。

また、プロセスの有効なUIDには、リンクを解除するファイルパスを含むディレクトリへの書き込みアクセス権が必要であることに注意してください。

于 2012-04-18T07:08:01.620 に答える
1

他の人が述べているように、ディレクトリは有効なユーザーが書き込み可能でなければなりません。ただし、ファイルに拡張アクセス許可(ACL)を適用して、ファイルが削除されないようにすることができます。あなたが示した例から、あなたはMac OSを使用していると思いますよね?ls -leそこで、ACLを表示するために使用できます。chmod(1)のマンページには、さまざまな権限が記載されています。プログラムでACLを照会する場合は、おそらくacl(3)のマンページを読むことから始める必要があります。

于 2012-04-18T07:18:29.547 に答える
0

それが存在するディレクトリは+w

于 2012-04-18T07:03:09.830 に答える