相关疑难解决方法(0)

如何用openpty实现Ctrl-C和Ctrl-D?

我正在使用NSTask和NSTextView编写一个简单的终端.如何和应该实施?openptyCtrlCCtrlD

我开始像这样的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)

shell cocoa objective-c nstask pty

11
推荐指数
1
解决办法
1173
查看次数

通过/ dev/pts在另一个终端中执行命令

我有一个使用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",而不仅仅是显示它.

有人可以向我解释这种行为吗?我如何实现我的意图?

linux stdin pts

9
推荐指数
1
解决办法
4758
查看次数

标签 统计

cocoa ×1

linux ×1

nstask ×1

objective-c ×1

pts ×1

pty ×1

shell ×1

stdin ×1