以下代码不适用于设备它不会进入设备上的while循环但它会在模拟器上运行。
int status;
char value[1024] = "abcd";
FILE *fp = popen("openssl enc -aes-128-cbc -k secret -P -md sha1 2>&1", "r");
if (fp == NULL)
exit(1); // handle error
int i=0;
NSString *strAESKey;
while (fgets(value, 1024, fp) != NULL)
{
i++;
if(i==2)
{
strAESKey=[NSString stringWithFormat:@"%s",value];
break;
}
}
status = pclose(fp);
if (status == -1)
{
/* Error reported by pclose() */
}
else
{
/* Use macros described under wait() to inspect `status' in order
to determine success/failure of command executed by popen() */
}
我哪里错了?
答案 0 :(得分:4)
iOS应用程序沙箱禁止使用fork
使用的popen
函数。模拟器不使用沙箱,但设备可以使用。
您需要直接使用openssl库,而不是使用命令行程序。 iOS公共API不包含openssl库,因此您需要自己构建静态库。您可以通过搜索找到一些帮助。我从this blog post开始。