hello每一个我想问我在制作一个程序,我必须使用c程序运行shell脚本。直到现在我已经分开了论点。并且我搜索了那个exec应该用来运行shell脚本 但是我完全困惑,因为exec有很多变种,并且通过阅读手册页我找不到哪个是最适合的使用c编程运行shell脚本
还有一些exec函数第一arg是
路径
和一些具有
指针到文件
的区别是什么,什么我应该在的地方it.kindly的编写指导我 感谢
hello每一个我想问我在制作一个程序,我必须使用c程序运行shell脚本。直到现在我已经分开了论点。并且我搜索了那个exec应该用来运行shell脚本 但是我完全困惑,因为exec有很多变种,并且通过阅读手册页我找不到哪个是最适合的使用c编程运行shell脚本
还有一些exec函数第一arg是
路径
和一些具有
指针到文件
的区别是什么,什么我应该在的地方it.kindly的编写指导我 感谢
从C程序运行shell脚本通常使用
#include <stdlib.h>
int system (char *s);
其中s是做指向脚本路径名的指针,例如
int rc = system ("/home/username/bin/somescript.sh");
如果需要脚本的stdout,请查看popen
手册页。
全部exec*
库函数在execve()
系统调用中最终是方便包装。只要使用你觉得更方便的那个。
以p
(execlp()
,execvp()
)结尾的那个使用$PATH
环境变量来查找要运行的程序。对于其他人,您需要使用完整路径作为第一个参数。
以e
(execle()
,execve()
)结尾的那些允许您定义环境(使用最后一个参数)。这样可以避免$PATH
,$IFS
和其他危险环境变量的潜在问题。
王氏在其名称中一个v
的那些采取的阵列来指定参数要运行的程序,同时用l
的那些采取的参数要运行的程序作为可变参数,在(char *)NULL
结束。举例来说,execle()
构造固定调用非常方便,而execv*
允许以编程方式变化的多个参数。
#include <stdio.h>
#include <stdlib.h>
#define SHELLSCRIPT "\
for ((i=0 ; i < 10 ; i++))\n\
do\n\
echo \"Count: $i\"\n\
done\n\
"
int main(void)
{
puts("Will execute sh with the following script:");
puts(SHELLSCRIPT);
puts("Starting now:");
system(SHELLSCRIPT);
return 0;
}
参考: http://www.unix.com/programming/216190-putting-bash-script-c-program.html
Exec将与脚本替换当前的程序。如果你想让你的程序继续运行,你应该使用'system'来执行同步执行,'fork' +'exec'来执行异步执行。 –
是否从exec系列中选择execve或其他功能取决于您是否需要/需要使用该路径,是否传递环境变量列表等。如果不需要,请选择最简单的。 – tripleee