0

readdir返回一个指向 a 的指针struct dirent,我已经测试了存储在两个不同指针中的两个调用是否readdir修改了第一个指针内容,它没有。

所以我猜 readdir 分配了一些内存,对吗?

如果是这样,它应该被释放,这是我以前从未做过的事情......

4

3 回答 3

2

POSIX 说应用程序不能修改返回的结构readdir()

应用程序不得修改 readdir() 的返回值指向的结构,也不得修改结构内指针所指向的任何存储区域。返回的指针和结构中的指针可能会失效,或者结构或存储区域可能会被对同一目录流的后续调用 readdir() 覆盖。它们不会受到在不同目录流上调用 readdir() 的影响。

所以它是内部分配内存还是使用静态缓冲区取决于具体实现如何实现。您需要做的就是尊重该功能所需的合同。也就是说,您不得尝试修改它并调用closedir()关闭目录流。

于 2016-01-09T19:56:58.740 回答
1

如果它确实分配了任何内存,则对 closedir (http://linux.die.net/man/3/closedir)的调用将为您释放它

于 2016-01-09T19:44:23.143 回答
1

是的,它应该被释放。你应该在之后调用一个closedir目录readdir,就像你调用普通文件一样。fclosefopen

于 2016-01-09T19:44:46.507 回答