Perl 使用哪些 libc/stdio IO 函数来打开文件?

问题描述 投票:0回答:1

Perl 使用哪些 libc/stdio 函数来打开和读取文件(例如

perl -e 'open(F,"<","test.txt");print(<F>);'
)?

我尝试在

strace
下运行此命令,它给了我一个序列
open
->
fcntl
->
ioctl
->
lseek
->
fstat
->
mmap
->
read
strace
拦截系统调用,所以我想知道在https://github.com/Perl/perl5/blob/blead/perlio.chttps中实际上调用了哪些更高级别的libc/stdio函数://github.com/Perl/perl5/blob/blead/doio.c? Perl I/O 代码库有很多间接层,所以我很难理解它。

我不是 Perl 专业人士,所以不理解 https://perldoc.perl.org/PerlIO 和代码库足够了:(

谢谢!

file perl io libc stdio
1个回答
0
投票

取决于层。这些在

perlio.c
中定义。

:unix
层被发现为
PerlIO_unix
。它使用
PerlIOUnix_open
打开并使用
PerlIOUnix_write
写入。这些使用
PerlLIO_open3_cloexec
PerlLIO_write
最终默认调用
open
write
,但这可能因平台而异。

© www.soinside.com 2019 - 2024. All rights reserved.