代码不适用于iPhone

时间:2013-02-11 07:16:08

标签: iphone popen

以下代码不适用于设备它不会进入设备上的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() */
}

我哪里错了?

1 个答案:

答案 0 :(得分:4)

iOS应用程序沙箱禁止使用fork使用的popen函数。模拟器不使用沙箱,但设备可以使用。

您需要直接使用openssl库,而不是使用命令行程序。 iOS公共API不包含openssl库,因此您需要自己构建静态库。您可以通过搜索找到一些帮助。我从this blog post开始。