Perl 从shell调用系统调用的一般方法

Perl 从shell调用系统调用的一般方法,perl,shell,system-calls,Perl,Shell,System Calls,我喜欢直接从命令行或shell脚本中调用truncate(constchar*path,off\t length)(请参阅) 我想我可以嵌入一个C程序,然后编译、运行和删除它 另一个简短的替代方法是使用perl-e“truncate($file,$length)” 问题: perl-e“syscall(params…)”是调用syscalls最常见的模式吗?它对其他系统调用的覆盖程度如何 是否有另一种从shell调用Linux/BSD系统调用的常用方法? 例如,使用类似于syscall“trun

我喜欢直接从命令行或shell脚本中调用
truncate(constchar*path,off\t length)
(请参阅)

我想我可以嵌入一个C程序,然后编译、运行和删除它

另一个简短的替代方法是使用
perl-e“truncate($file,$length)”

问题:

perl-e“syscall(params…)”
是调用syscalls最常见的模式吗?它对其他系统调用的覆盖程度如何

是否有另一种从shell调用Linux/BSD系统调用的常用方法?
例如,使用类似于
syscall“truncate($file,$length)”的命令

感谢您的所有评论和建议。我总结以下对我的问题的回答:

  • 一些脚本语言(例如,
    perl
    )可能提供类似于或包装一些有用的系统调用的函数,即那些从shell调用的函数
  • 但是,没有脚本API和系统调用的1:1映射,也没有从shell调用许多不同类型系统调用的“公共模式”或工具

  • 此外,针对特定问题的通用解决方案不应该首先关注系统调用,而应该从一开始就使用通用语言或库。例如,对于文件截断,这实际上可能是perl,使用
    perl-e“truncate($file,$length)”

    python
    ,或
    ruby
    ,或
    lua
    ,或几乎任何其他公开类似功能的解释语言。您想要实现哪些特定操作?您可以调用
    truncate(2)
    通过
    truncate(1)
    命令从shell获取。它将考虑长度参数的宽度等,并且比perl
    syscallnumber,LIST
    更具可移植性。一般来说,您不需要直接从shell调用syscalls。@Саа27:特别是,我想截断一个文件。然而,由于shell上还缺少其他功能,例如以ms或µs为单位获取当前时间的通用方法,因此我考虑使用BSD/Linux系统调用来实现此目的,例如调用
    gettimeofday(2)
    @DmitriChubarov:
    truncate(1)
    在我的Mac上不可用。这就是为什么我首先要寻找一个通用的解决方案。