注意:这不是要求程序的问题,它询问一些技术细节,请首先参见以下问题。
我需要为现有程序编写C / C ++包装程序。我知道我们需要使用exec / fork / system并传递参数,然后返回程序的结果。
问题是,如何确保调用程序(调用包装程序)和包装程序都完全像以前一样工作(忽略时序差异)。可能需要处理一些细微的事情,例如环境参数。 fork / system / exec,使用哪个?他们够了吗?还有其他因素要考虑吗?
答案 0 :(得分:2)
假设您有以下原始程序:
foo.sh
#!/bin/bash
echo "Called with: ${@}"
exit 23
使其可执行:
$ chmod +x foo.sh
现在将包装器放入C
:
wrapper.c
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char* argv[]) {
printf("Executing wrapper code\n");
/* do something ... */
printf("Executing original program\n");
if(execv("./foo.sh", argv) == -1) {
printf("Failed to execute original program: %s\n", strerror(errno));
return -1;
}
}
运行它:
$ gcc wrapper.c
$ ./a.out --foo -b "ar"
Executing wrapper code
Executing original program
Called with: --foo -b ar
$ echo $?
23