0

次のコードはデバイスでは機能しません。デバイスの 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() */
}

どこが間違っていますか?

4

1 に答える 1

4

iOS アプリのサンドボックスではfork、 を使用する機能の使用を禁止していpopenます。シミュレーターはサンドボックスを使用しませんが、デバイスは使用します。

コマンドライン プログラムを使用する代わりに、openssl ライブラリを直接使用する必要があります。iOS パブリック API には openssl ライブラリが含まれていないため、静的ライブラリを自分で構築する必要があります。検索すると、これを行うためのヘルプを見つけることができます。このブログ投稿から始めます。

于 2013-02-11T07:36:19.583 に答える