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.c和https中实际上调用了哪些更高级别的libc/stdio函数://github.com/Perl/perl5/blob/blead/doio.c? Perl I/O 代码库有很多间接层,所以我很难理解它。
我不是 Perl 专业人士,所以不理解 https://perldoc.perl.org/PerlIO 和代码库足够了:(
谢谢!
perlio.c
中定义。
:unix
层被发现为PerlIO_unix
。它使用 PerlIOUnix_open
打开并使用 PerlIOUnix_write
写入。这些使用 PerlLIO_open3_cloexec
和 PerlLIO_write
最终默认调用 open
和 write
,但这可能因平台而异。