web-dev-qa-db-ja.com

UNIXでのC ++でのファイルの削除

Linux OSで通常どのようにファイルを削除しますか? unlink関数呼び出しを使用することを考えていますが、C++標準にはファイル削除操作についての言及がなく、システムに依存するため、より良いアイデアがあるかどうか疑問に思います。

21
Sasha

そうです-C++標準はこれをOSに任せているので、Linux(または任意のPOSIXシステム)を使用している場合は、 unlink() が得られます。

C標準は remove() を提供します。これを試すことはできますが、「通常のファイル」以外の場合は 動作は指定されていません であることに注意してください。そのため、プラットフォーム固有のファイルシステムの詳細(リンクなど)に入るのを実際に防ぐことはできません。

より高レベルで、より堅牢で、より移植性の高いものが必要な場合は、 Boost Filesystem を確認してください。

29
Todd Gamblin

標準には、それを行う remove という関数が含まれています。そのためにはboost.filesystemを好みますが(とにかくすでにブーストを使用している場合)。

#include <cstdio>

int main() {
    std::remove("/home/js/file.txt");
}

unlink()[〜#〜] posix [〜#〜] 標準によって定義されているため、POSIX互換システムに存在し、そうでないものもかなりあります。 POSIX互換でもあります。

2
Alnitak

リンク解除はそれを行う正しい方法です。

1
smoofra

最近のカーネルもunlinkatを提供していることに注意してください。ディレクトリ自体にファイル記述子がある場合、この関数はunlinkよりも高速です。

0
Yoric