gpt4 book ai didi

objective-c - 将 NSTask "/bin/sh -c"命令转换为正确的管道代码

转载 作者:行者123 更新时间:2023-12-03 16:33:07 25 4
gpt4 key购买 nike

有人可以帮我将以下代码转换为具有两个 NSTasks 的代码:“cat”和“grep”,展示如何使用管道将两者连接在一起?我想我更喜欢后一种方法,因为这样我就不用再担心引用之类的事情了。

NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/bin/sh"];

NSArray *arguments;
arguments = [NSArray arrayWithObjects: @"-c",
@"cat /usr/share/dict/words | grep -i ham", nil];
[task setArguments: arguments];
[task launch];

更新:请注意,cat 和 grep 在这里只是作为(糟糕的)示例。我仍然想为更有意义的命令执行此操作。

最佳答案

为每个程序使用一个 NSTask 实例,并使用 NSPipe 连接它们的标准输入/输出:

NSPipe *pipe = [[NSPipe alloc] init];
NSPipe *resultPipe = [[NSPipe alloc] init];

NSTask *task1 = [[NSTask alloc] init];
[task1 setLaunchPath: @"/bin/cat"];
[task1 setStandardOutput: pipe];
[task1 launch];

NSTask *task2 = [[NSTask alloc] init];
[task2 setLaunchPath: @"/bin/grep"];
[task2 setStandardInput: pipe];
[task2 setStandardOutput: resultPipe];
[task2 launch];

NSData *result = [[resultPipe fileHandleForReading] readDataToEndOfFile];

关于objective-c - 将 NSTask "/bin/sh -c"命令转换为正确的管道代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6243557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com