Linuxサーバーで実行されているC++のコードがあります。コードでは、関数unlink(filename)
を使用してファイルを削除しています。コード自体によって生成される一時ファイルは正常に削除されます。しかし、私が手動で入れているファイル、私のコードはそれらを削除することができません。理由は何でしょうか?
2 に答える
これを試して:
#include <errno.h>
#include <string.h>
..。
if (unlink(filename) == -1) {
fprintf(stderr, "File '%s' unlink error (%d): %s\n", filename, errno, strerror(errno));
// or just use perror("unlink") for less customizable error message
// note: calling other functions before printing may change errno value
}
結果のエラーメッセージは、問題が何であるかを明らかにするはずです。
これがerrnoのmanページです。リンクを解除するmanページは、返される可能性のあるエラーを示します。
うーん、これは実際にはC ++の質問なので、に置き換えることができ、場合によっては置き換える必要がありますfprintf
がstd::cerr
、その場合は、int errtmp = errno
iostreamが調べられる前に混乱しないように、最初にそれを実行して使用する必要があります。
また、それがトップレベルの名前空間のシンボルであることを明示したい場合は、書くことができ::unlink(filename)
ます。少なくとも一部の人々は、必要がない場合でもその良い習慣を考えています。
たとえばrm -f
、ファイルが削除できないように保護されている場合、chmod()
andchown()
関数を使用して「ファイルの削除を可能にする」ことにより、ファイルの保護と所有権を変更しようとします。これは、ユーザーがroot
プログラムを実行しているユーザーであるか、ファイルが実際にユーザーに属している場合にのみ、実際に機能することが保証されています。
これはシステムに依存することに注意してください。WindowsとUnixライクなOSの両方で機能する方法でファイル権限などを変更するコードを作成することはできません。たとえば、Symbian OSでこれを実行したい場合は、場合によっては「Posix互換」がchmod()
利用できる場合もありますが、その方法に関する3番目のバリエーションです。