3

我需要将一个字符串变量传递给我为解密一段加密数据而制作的 popen 命令。我需要使用的代码段是:

char a[]="Encrypted data";
popen("openssl aes-256-cbc -d -a -salt <a-which is the data i have to pass here>","r");

我应该怎么做才能将此变量传递给命令。我试过:

popen("openssl aes-256-cbc -d -a -salt %s",a,"r");

但是在编译时显示错误,popen 传递了太多参数。请帮忙。提前致谢。操作平台:Linux

4

2 回答 2

5

用于snprintf构造传递给 popen 的命令字符串。

FILE * proc;
char command[70];
char a[]="Encrypted data";
int len;
len = snprintf(command, sizeof(command), "openssl aes-256-cbc -d -a -salt %s",a);
if (if len <= sizeof(command))
{
    proc = popen(command, "r");
}
else
{
    // command buffer too short
}
于 2012-06-22T07:31:03.957 回答
2

snprintf如果参数包含任何空格、引号或其他特殊字符,构造命令字符串将中断。

在 Unix 平台上,您应该改为使用pipe创建管道,然后使用 启动子进程posix_spawnp,使用 将子进程的标准输出连接到管道的输入端posix_spawn_file_actions_adddup2

于 2012-06-22T08:48:22.687 回答