0

Cocoa で NSTask を理解するのに苦労しているようです。起動したいアプリケーションはopenSSLです。現在、情報 (起動パス、引数など) を送信でき、NSPipe を使用して応答を取得することもできます。私ができる必要があるのは、アプリケーションが要求する入力要求に応答することです。次のコードを使用すると、ファイルから応答を送信して読み取ることができます。

 NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: launchPath];
[task setArguments: arguments];
[task setCurrentDirectoryPath:dir];

NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];

NSFileHandle *file;
file = [pipe fileHandleForReading];

[task launch];

NSData *data;
data = [file readDataToEndOfFile];
NSString *response =  [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];

NSTask を起動したら、ドメイン名、国などを提供する必要があります。私の質問の理由は、openSSL を使用して証明書署名要求を生成し、他のデータと一緒に送信できるようにする必要があるためです。 、サーバーに。上記のコードは壊れていません。その入力を送信する方法がわかりません。

また、誰かが Cocoa/ObjC である種の openSSL 実装を使用していて、NSTask を使用するよりも優れたオプションであると感じている場合、私はそれにも完全にオープンです。

前もって感謝します。

4

1 に答える 1

2

誰もこれを見ているわけではありませんが、答えがわからない場合は、解決策を見つけましたが、別の方法を使用してしまいました. 追加の入力を送信する代わりに、-subj パラメーターを渡すだけです。ただし、私が最初に求めていたものに対する解決策は次のとおりです。

NSTask *task = [[NSTask alloc] init];

NSString *tmpdir=NSTemporaryDirectory();
[task setCurrentDirectoryPath:tmpdir];

[task setLaunchPath:@"/usr/bin/openssl"];
NSArray *sslarguments=@[@"req",@"-nodes",@"-newkey",@"rsa:2048",@"-keyout",@"myserver.key",@"-out",@"server.csr"];
[task setArguments:sslarguments];


NSPipe * in = [NSPipe pipe];

[task setStandardInput:in];

NSData *data=[@"GB\nYorks\n\nYork\SimuplanSL\nIT\nsomeone@simuplan.com" dataUsingEncoding:NSUTF8StringEncoding];

[task launch];
[[in fileHandleForWriting] writeData:data];
[task waitUntilExit];

一時ディレクトリ内のファイルに書き込み、入力パイプを介してフィードするだけでした。

于 2013-07-20T12:38:02.417 に答える