是否可以从shell脚本调用操作系统调用,如open,close等?我试过谷歌搜索,但它把我带向了错误的方向,使用system()命令。有人能帮忙吗?
open
close
system()
vs91vp4v1#
许多系统调用是可以访问的,但只能通过本机shell机制,而不能直接指定确切的参数。例如:
exec 4>outfile
电话:
open("outfile", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3 dup2(3, 4)
(with 3被下一个可用描述符替换),以及
3
exec 4<&-
close(4)
一些shell,比如bash,允许通过可加载模块添加额外的内置程序(参见enable内置程序,用于加载此类模块);如果你真的需要上游没有提供的功能,你可以用这种方式实现它。
enable
6tqwzwtp2#
这取决于系统。例如,AIX有一个syscall command用于
syscall
syscall [ -n ] Name [ Argument1 ... ArgumentN ] [ ; Name [ Argument1 ... ArgumentN ] ] ...
Plan9也有一个similar command:
syscall [ -o ] entry [ arg ... ]
在Linux上没有这样的命令,但有mauri870/syscall,它是将plan9 syscall命令移植到Linux的努力比如说,
$ ./syscall write 1 Hello$'\n'World$'\n' 12 Hello World $ ./syscall -o read 0 buf 5 xyz xyz $ ./syscall -ov getcwd buf 100 Syscall return: 23 /home/user/src/syscall
另一个端口是oliwer/syscall
syscall [-<n>] name [args...] [, name [args...]]...
示例用法:
syscall open /my/file 1 0755 , write \$0 hello \#hello , close \$0 syscall open /dev/random 0 , echo \$0
2条答案
按热度按时间vs91vp4v1#
许多系统调用是可以访问的,但只能通过本机shell机制,而不能直接指定确切的参数。例如:
电话:
(with
3
被下一个可用描述符替换),以及电话:
一些shell,比如bash,允许通过可加载模块添加额外的内置程序(参见
enable
内置程序,用于加载此类模块);如果你真的需要上游没有提供的功能,你可以用这种方式实现它。6tqwzwtp2#
这取决于系统。例如,AIX有一个
syscall
command用于Plan9也有一个similar command:
在Linux上没有这样的命令,但有mauri870/syscall,它是
将plan9 syscall命令移植到Linux的努力
比如说,
另一个端口是oliwer/syscall
示例用法: