Perl中open和sysopen有什么区别?

lex*_*xer 9 perl

看起来两者都做同样的事情,对吧?

有人能告诉我一个他们做不同工作的例子吗?

Bla*_*iev 18

sysopen是一个围绕open(2)内核系统调用的薄包装器(参数直接对应),而是open一个更高级别的包装器,它允许您进行重定向,管道等.

除非您正在使用需要传递特殊标志的特定设备,否则open(2)对于磁盘上的普通文件,您应该没问题open.

  • @lexer:真的没什么好说的 - 剩下的就是了解系统调用是什么,以及`open(2)`的特定接口是什么,所有这些都是OS的东西,而不是Perl特有的. (2认同)
  • @lexer:答案是正确的.如果你需要一个真实的例子,可以考虑`O_WRONLY | O_EXCL | O_CREAT`组合,即"如果不存在则创建和写入".使用`-f ...或open ...`只是要求竞争条件. (2认同)

Jon*_*n M 12

引用perlopentut:

如果你想要shell的便利性,那么Perl的开放绝对是你要走的路.另一方面,如果你想要比C的简单fopen(3S)提供更精确的精度,你应该看看Perl的sysopen,它是open(2)系统调用的直接挂钩.这确实意味着它涉及更多,但这是精确的代价.

由于Perl是用C语言编写的,因此两种方法都可能最终进行open(2)系统调用.不同之处在于open(),Perl内置了一些细节,使打开,管道重定向 变得非常容易.但与此同时,却open()带走了一些灵活性.它没有Fcntl可用的功能sysopen(),也没有屏蔽功能.

大多数情况只需要open().