作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
注意:这不是一个询问程序的问题,它询问一些技术细节,请先看下面的问题。
我需要用 C/C++ 为现有程序编写一个包装程序。我知道我们需要使用exec/fork/system并传递参数然后返回程序的结果。
问题是,如何确保调用程序(调用包装器)和包装程序完全像以前一样工作(忽略时序差异)。可能还有一些微妙的事情需要处理,比如环境参数。 fork/system/exec,该使用哪个?他们够了吗?还有其他因素需要考虑吗?
最佳答案
假设您有以下原始程序:
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
关于c - 如何在Linux中编写完全透明的C/C++包装程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55879376/
我是一名优秀的程序员,十分优秀!