相关文章:Delete folder with items指向struct的指针比指定更多?
如何使指针数组中的指针可用于比指定更多的指针?对于ftw/ftwn的学习工具,我重写了ftwn相关文章(上面)中的ftwn解决方案。基本上使用ftw回调来填充包含文件名,每个文件的类型和深度的结构数组。然后,文件删除从maxdepth开始,直到删除文件,然后沿途删除目录。这是一个测试,所以printf
显示unlink
或rmdir
应该被调用,删除命令永远不会执行。
结构数组的存储尝试了3种不同的方式。 (1)静态指定可用指针的数量struct _rmstat *rmstat [100];
(ftw'nopenfd'设置为200),(2)动态分配struct _rmstat **rmstat;
,最后(3)将信息添加到链接列表。测试静态分配时,我专门选择了少于100个文件的测试目录,然后使用多于100个文件的目录,导致失败。
令我惊讶的是,静态分配的测试会定期处理包含超过100个文件的目录,最多可达450个!这怎么可能?我认为静态分配struct _rmstat *rmstat [100];
应该保证在尝试101st结构分配时发生段错误(或类似的核心转储)。在堆栈/堆分配中,gcc中是否有这样的功能?或者,这只是“未定义”行为的一部分吗?与ftw,我设置'nopenfd'大于可用的结构指针,所以我不认为这是ftw限制文件描述符和关闭/重新打开文件的结果。
我已经搜索,但找不到解释如何得到比指定更多的指针。这里有人知道这会发生吗?
该test program source可用。 它是安全的 - 它删除任何东西,只是与printf
打印。搭建:gcc -Wall -o rmftws rmdir-ftw-static.c
感谢您提供的任何见解。
相关:http://stackoverflow.com/q/2397984/951890 –