我正在尝试使用perl来解析/ proc和/ sys linux伪文件系统(procfs和sysfs)中的一些伪文件.这些文件与常规文件不同 – 它们由自定义文件操作处理程序实现.对于stat,大多数都没有大小,有些不能打开读取,其他不能写入.有时它们被错误地实现(这是错误的,但它已经在内核中)并且我仍然希望直接从perl读取它们而无需启动一些帮助工具.
有一个使用perl读取/ proc / loadavg的快速示例,此文件已正确实现:
perl -e 'open F,"
使用命令的strace,我可以检查perl如何实现open函数:
$strace perl -e 'open F,"
open perl函数使用lseek系统调用.
使用cat / proc / loadavg的strace,没有额外的搜索类型系统调用:
$strace cat /proc/loadavg 2>&1 | egrep -A2 ^open.*loadavg
open("/proc/loadavg",O_RDONLY) = 3
fstat(3,...}) = 0
fadvise64(3,POSIX_FADV_SEQUENTIAL) = 0
我想要读取(或写入)错误实现的特殊文件寻求文件操作,并且在搜索之后不会提供任何有用的数据来读取(或写入)系统调用.
有没有办法打开文件,在没有调用额外的lseek的情况下读取perl5(没有外部模块)? (并且不使用系统(“cat< / proc / loadavg”)) 有没有办法打开文件写入perl5而不调用额外的lseek? 有sysopen,但它也有额外的lseek:perl -e’使用Fcntl; sysopen(F,“/ proc / loadavg”,O_RDONLY); sysread(F,$_,2048);打印’
自从Perl 5的第一个版本发布以来,POSIX模块就是核心perl发行版的一部分,所以如果你没有它,你的Perl安装就会瘫痪.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。