我有
#!/bin/sh
func1()
{
echo "This is func1 from shell script"
}
func2()
{
echo "This is func2 from shell script"
}
我想从C程序调用func1和func2。我能这样做吗?
答案 0 :(得分:7)
这不太可能是一个好主意,但我想你可以这样写:
if (! fork()) { // TODO fork can return -1 on error; should check for that
execl("/bin/sh", "-c", ". FILE && func1", (char *)NULL);
// TODO should check to make sure execlp successfully replaced the process
}
其中FILE
是定义.sh
的{{1}}文件的名称。上面将生成一个子进程,并用参数func1
(意思是“要运行的脚本是下一个参数”)和{{1}用一个Bash实例(或任何你的shell)替换该子进程(这是脚本;它表示“在-c
中运行命令,如果成功,则运行命令. FILE && func1
”。
了解更多信息:
答案 1 :(得分:2)
比使用fork / exec更简单的是stdlib“system”命令。
请参阅man 3 system。
假设您的bash函数位于文件“/tmp/scripts.sh”...
中system("bash -c \". /tmp/scripts.sh ; func1 ; func2\"");
答案 2 :(得分:0)
如果你想收到执行脚本的退出代码,你应该使用system,否则使用vfork + exec *