我正在使用NSTask和NSTextView编写一个简单的终端.如何和应该实施?openpty
CtrlCCtrlD
我开始像这样的shell:
int amaster = 0, aslave = 0;
if (openpty(&amaster, &aslave, NULL, NULL, NULL) == -1) {
NSLog(@"openpty failed");
return;
}
masterHandle = [[NSFileHandle alloc] initWithFileDescriptor:amaster closeOnDealloc:YES];
NSFileHandle *slaveHandle = [[NSFileHandle alloc] initWithFileDescriptor:aslave closeOnDealloc:YES];
NSTask *task = [NSTask new];
task.launchPath = @"/bin/bash";
task.arguments = @[@"-i", @"-l"];
task.standardInput = slaveHandle;
task.standardOutput = slaveHandle;
task.standardError = errorOutputPipe = [NSPipe pipe];
[task launch];
Run Code Online (Sandbox Code Playgroud)
然后我拦截CtrlC并发-[interrupt]
送到NSTask
这样的:
- (void)keyDown:(NSEvent …
Run Code Online (Sandbox Code Playgroud) 我有一个使用STDIN 3
(/proc/xxxx/fd/0 -> /dev/pts/3
)的终端
所以如果(在另一个终端)我这样做:
echo 'do_something_command' > /dev/pts/3
Run Code Online (Sandbox Code Playgroud)
该命令显示在我的first(pts/3
)终端中,但该命令未执行.如果(在这个终端中pts/3
)我在一个等待来自某个数据的程序中stdin
,数据会写在屏幕上,但程序不能从中捕获数据stdin
.
我想要做的是执行命令"do_something_command"
,而不仅仅是显示它.
有人可以向我解释这种行为吗?我如何实现我的意图?