我需要将一个字符串变量传递给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
答案 0 :(得分:4)
使用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
}
答案 1 :(得分:1)
如果参数包含任何空格,引号或其他特殊字符,则构造带有snprintf
的命令字符串将会中断。
在Unix平台上,您应该使用pipe
来创建管道,然后使用posix_spawnp
启动子流程,将子流程的stdout连接到管道的输入端posix_spawn_file_actions_adddup2
。