- 论坛徽章:
- 0
|
原帖由 churchmice 于 2009-11-4 14:37 发表 ![]()
那你可以考虑下使用多个参数的system
system("ls -l")
这样的写法是会在后台调用/bin/sh的
但是
system("ls","-l")
这样的写法可以绕过/bin/sh直接调用/bin/ls
No. 你给的例子两者没有任何区别。
perldoc -f system
system LIST
system PROGRAM LIST
Does exactly the same thing as "exec LIST", except that a
fork is done first, and the parent process waits for the
child process to complete. Note that argument processing
varies depending on the number of arguments. If there is
more than one argument in LIST, or if LIST is an array with
more than one value, starts the program given by the first
element of the list with arguments given by the rest of the
list. If there is only one scalar argument, the argument is
checked for shell metacharacters, and if there are any, the
entire argument is passed to the system’s command shell for
parsing (this is "/bin/sh -c" on Unix platforms, but varies
on other platforms). If there are no shell metacharacters
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
in the argument, it is split into words and passed directly
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
to "execvp", which is more efficient.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
|