可以使用这样的readdir_r
吗?我没有找到关于它的规范什么,但也许我只是盲目...对于readdir_r,可能条目和结果具有相同的值?
回答
这是readdir_ [R,第二个参数是指针一个struct的dirent,而不是一个结构dirent本身,第三个参数是一个指向结构dirent的指针,它接收struct dirent的地址或NULL作为结束目录。用法是一样的东西
struct dirent* pentry = malloc(offsetof(struct dirent, d_name) +
pathconf(dirpath, _PC_NAME_MAX) + 1);
if (!pentry)
out_of_memory();
for (;;){
struct dirent* result;
readdir_r(dirp, pentry, &result); // you can check the return code, but it only fails if dirp is invalid
if(!result)
break;
// process result
}
free(pentry);
至于斯托伊奇上面所指出的,参数是按值传递的,所以你可以通过第二ARG(pentry)作为第三个参数的地址(即& pentry) - - 它不影响readir_r,它无法分辨。但是,当你到达目录结尾时,它会在pentry中存储NULL,但是你需要pentry的值来释放它指向的malloced缓冲区。因此,忘记是否允许使用第二个参数的地址......这样做是毫无意义的,误导性的,并导致内存泄漏。
对于readdir_r的规范,请参阅系统 http://www.kernel.org/doc/man-pages/online/pages/man3/readdir.3.html 或 http://pubs.opengroup.org/onlinepubs/009695399/functions/readdir.html
所以我不能使用'readdir_r()'而不使用'malloc()'来执行dirent?或者我可以只传递一个指向我的'dirent结构'在堆栈上的指针? –
@Jawsmerc是的,你可以在栈上分配一个'struct dirent'。 d_name成员将有足够的空间存放长度为NAME_MAX的路径。 –
- 1. 具有多个条目具有相同值的JQuery select选项
- 2. 对于具有相同值表
- 3. 具有相同的密钥和值对
- 4. R-功能% - 不同的结果具有相同参数的
- 5. 是否有可能有2个不同的NSNumber对象具有相同的值?
- 6. LEFT对于相同的值返回不同的结果
- 7. getIntent()getStringExtra(Intent.EXTRA_TEXT)具有相同的结果
- 8. 对不同的结果使用具有相同值的枚举? C++
- 9. 具有相同条件的联合结果
- 10. 在表中找到具有相同值的列的条目
- 11. 限制分页基于具有相同名称的条目数
- 12. Linq语句为所有条目返回相同的结果
- 13. 具有相同结果的多个目标名称?
- 14. 需要帮助将可能或可能不具有相同值但具有相同帐户的列分组
- 15. PHP总结阵列条目,其中两个键具有相同的值
- 16. 用于查找矢量中具有相同最大值的条目的函数
- 17. 如果所有对象都具有相同的css值,那么
- 18. 显示XML数据条目具有相同的节点值
- 19. 在php中计数具有相同值的mysql条目?
- 20. 根据其他具有相同值的条目选择最新条目?
- 21. 具有相同结构的不同表格获取结果
- 22. 具有相同等值的组行具有相同的值
- 23. 使用PHP订购,但一些条目可以具有相同的值
- 24. Python:对象具有相同的值?
- 25. 两个结构具有相同可变
- 26. 查找具有相同幅度的条目和虚部在Matlab
- 27. R和rbind使不具有相同长度的条目为零
- 28. 只能选择具有相同foreign_id条目两次
- 29. 选择查询和相同的查询具有结果
- 30. 使用事务对于具有相关结果
'男人readdir_r'。 – MYMNeo
当到达目录结尾时,'readdir_t()'将其'result'参数设置为'NULL'。如果你用'malloc()'(可能的内存泄漏)分配'entry',请牢记这一点。否则,你可以做你所做的事情,因为'entry'和'&entry'是按值传递给函数的。 –
@MYMNeo:在我的系统上没有关于它的单独手册页,在'readdir'手册中没有提到我的问题。 – thejh