在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/