日期:2014-05-16  浏览次数:20919 次

关于readdir和stat两个函数的疑问
当我们使用readdir时一般会定义一个DIR*和dirent*,一个相当于文件描述符,另一个用来读取目录结构体内容
像这样

DIR*pDIR=opendir(....);
struct dirent*pSD;
while((pSD=readdir(pDIR)!=NULL)....
...
closedir(pDIR);

当我们使用stat时一般会定义一个stat结构体

struct stat sb;
if(stat(...,&sb)!=0)...;


发现dirent结构体的内存不是自己申请的,也不需要释放

/*
On  success,  readdir() returns a pointer to a dirent structure.  (This
       structure may be statically allocated; do not attempt to  free(3)  it.)
*/

而stat结构体是需要自己分配结构体空间的,像这样的结构体unix接口里还有很多,而且大部分用指针以便带回返回值。
有没有一种特定习惯能区分哪些需要自己分配空间,哪些是系统分配?
(比如系统分配的都需要调用close*???)
------解决方案--------------------
引用:
当我们使用readdir时一般会定义一个DIR*和dirent*,一个相当于文件描述符,另一个用来读取目录结构体内容
像这样

DIR*pDIR=opendir(....);
struct dirent*pSD;
while((pSD=readdir(pDIR)!=NULL)....
...
closedir(pDIR);


当我们使用stat时一般会定义一个stat结构体

struct stat sb;
if(stat(...,&sb)!=0)...;


发现dirent结构体的内存不是自己申请的,也不需要释放

/*
On  success,  readdir() returns a pointer to a dirent structure.  (This
       structure may be statically allocated; do not attempt to  free(3)  it.)
*/

而stat结构体是需要自己分配结构体空间的,像这样的结构体unix接口里还有很多,而且大部分用指针以便带回返回值。
有没有一种特定习惯能区分哪些需要自己分配空间,哪些是系统分配?
(比如系统分配的都需要调用close*???)

很抱歉没有,不过若是系统分配的,基本都要注意是否是线程安全的。
------解决方案--------------------
目前还没发现什么规律。