首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux上有没有一种异步信号安全的方法来读取目录列表?

问在Linux上有没有一种异步信号安全的方法来读取目录列表?
EN

Stack Overflow用户
提问于 2013-08-29 22:16:54
回答 1查看 523关注 0票数 4

SUSv4没有在它的异步信号安全函数列表中列出opendir、readdir、closedir等。

有没有一种从信号处理程序读取目录列表的安全方法?

例如,有没有可能“打开”目录,然后以某种方式擦出原始目录列表?如果是这样,那么'read‘返回什么样的数据结构?

或者,也许在Linux上,某些系统调用是异步信号安全的,即使SUSv4 / POSIX不需要它也可以使用?

EN

回答 1

Stack Overflow用户

发布于 2014-06-27 18:55:24

如果事先知道需要读取哪个目录,可以在信号处理程序外部调用opendir() (opendir()调用malloc(),因此不能从处理程序内部运行它),并将DIR*保存在某个静态变量中。当您的信号处理程序运行时,只要您可以保证在任何时刻只有一个信号处理程序使用readdir_r*句柄,您就应该能够在该句柄上调用DIR()。在DIR中有一个由readdir()和readdir_r()获取的lock字段,因此,如果您使用了来自两个信号处理程序的DIR*,或者您注册了同一个处理程序来处理多个信号,您可能会因为被中断的处理程序从未释放锁而导致死锁。

类似的方法似乎也适用于在调用fork()之后但在调用execve()之前从子进程读取目录。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18513454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档