c - perl 中是否有与 read() 相反的函数,就像 C 中的 fwrite() 一样?

标签 c perl

在perl中,可以使用read函数对文件进行缓冲读取,就像C的fread()一样。然而,perl 中的 write 函数“不幸的是,它不是 read 的反面”,而是“用于将格式化记录写入文件”( http://www.perlfect.com/articles/perlfile.shtml )。该链接建议使用打印代替。但是,与 C 中的 read 和 fwrite() 返回读取/写入的项数不同, print 只返回一个 bool 值,表示输出是否成功 ( https://perldoc.perl.org/functions/print.html )。

或者 C 的 fwrite() 的结果无论如何都是无用的,因为部分可能已成功写入缓冲区,但尚未实际刷新到文件?与 perl 的 read 和 C 的 fread() 相比,这似乎是不对称的,后者保证返回的项目数实际上已成功从文件读入缓冲区。因此,如果 fwrite() 报告所有项均已成功写入,则其返回值是不可靠的。另一方面,人们可能会认为,如果返回值报告短写入,那么它至少是有用的,因为在这种情况下,在实际尝试刷新到文件时一定发生了错误,因此人们可以肯定地知道报告的项目虽然很短,但实际上已成功写入文件。

最佳答案

syswrite() 和 sysread() 与您所能达到的最接近。这些函数在底层使用 write(2) 和 read(2)。

参数签名类似于 C 的 read()/write() 函数,因为它们处理原始字节,而不是已知大小的 n 个元素。

标准警告:不要将 Perl 的正常格式化 I/O 与同一句柄上的 sysread()/syswrite() 混合,除非您感到痛苦或深奥。

关于c - perl 中是否有与 read() 相反的函数,就像 C 中的 fwrite() 一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44735065/

相关文章:

无法在函数中进行函数调用以正常工作

c - 为什么我不能使用 C 打印此文件中的整个消息?

python - 我可以在 python3 中使用类似于 perl 中的 -n pipeline-option 的东西吗?

regex - perl regex - 提取函数定义参数

regex -\G什么时候在正则表达式中有用?

c - 访问 C 结构成员时模拟 "inheritance"

c# - HRESULT 异常 : 0x80131047

c - 解析传入的数据包

<STDIN> 上的正则表达式找不到匹配项 - Perl

algorithm - 在 Perl 中确定范围重叠的最快方法