gpt4 book ai didi

c - 如何在Linux中编写完全透明的C/C++包装程序

转载 作者:行者123 更新时间:2023-11-30 18:45:01 25 4
gpt4 key购买 nike

注意:这不是一个询问程序的问题,它询问一些技术细节,请先看下面的问题。

我需要用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com