getfsentから返されたfstabポインタを解放する必要がありますか?

getfsentから返されたfstabポインタを解放する必要がありますか?
#include <fstab.h>

struct fstab *getfsent(void);

http://man7.org/linux/man-pages/man3/getfsent.3.html

getfsentファイルから1行を読み込み、/etc/fstab型の変数を返しますstruct fstab*。必ず解放すべきですか?それとも他人が管理しているのですか?他の人が管理している場合、戻り型ではないのはなぜですかconst struct fstab*?上記の参照を確認しましたが、役に立つものが見つかりませんでした。

ベストアンサー1

少なくともglibcではこれをしてはいけません。これ源泉このポインターが内部状態構造のメンバーを指しているため、直接解放できないことを示します。

これ文書これは以下でも暗示されます。

ファイルの内容全体を読み取るために、fstabGNU Cライブラリには一般的な方法で設計された3つの関数のセットが含まれています。

ここで「一般的な」方法は次のとおりです。getpwent:

戻り値は静的領域を指すことができ、後続の呼び出しで呼び出されるかgetpwent()上書きgetpwnam(3)できますgetpwuid(3)。 (返されたポインタをに渡さないでくださいfree(3)。)

また、glibc のドキュメントでは、以下を具体的に取り扱っていますgetfsent

この関数は型変数へのポインタを返しますstruct fstab。この変数はすべてのスレッドで共有されるため、関数はスレッドセーフではありません。エラーが発生すると、getfsentはNULL ポインタを返します。

変数は共有されます。これはメモリ管理を台無しにしてはならないという強力なマーキングです。

リソースを解放するには、を使用してくださいendfsent()。これにより内部状態が消去されます。

おすすめ記事