【问题标题】:Sending EOF to NSTask via NSPipe or NSFileHandle通过 NSPipe 或 NSFileHandle 将 EOF 发送到 NSTask
【发布时间】:2013-07-19 14:27:26
【问题描述】:

我有一个 NSTask 处理从标准输入传递的参数。 参数通过NSFileHandle 传递。

它工作正常,但是我们的命令行工具从标准输入读取输入,直到它接收到 EOF 符号(通过按 Ctrl+C)。

我认为我不能将 EOF 符号添加到 ASCII 字符串中,那么有哪些选项? 任何反馈表示赞赏!

提前致谢!

【问题讨论】:

  • Ctrl-c 不是 EOF;它是 SIGINT(中断)。此外,EOF 不是字符;这是文件的结尾。因此,要“发送 EOF”,您只需结束文件即可。
  • @PeterHosey 从技术上讲,确实有一个由 ASCII 定义的 EOF 字符,并且一直在使用。但是不可否认,将字符发送到文件中对 Mac 没有帮助。
  • 啊,是的,传输结束字符 - 也称为 Ctrl-D。 en.wikipedia.org/wiki/End-of-Transmission_character

标签: cocoa stdin eof nstask nspipe


【解决方案1】:

在管道的写入端调用 closeFile 表示 EOF 条件:

NSPipe *inPipe = [NSPipe new];
[task setStandardInput:inPipe];

[[inPipe fileHandleForWriting] writeData:...];
// ...
[[inPipe fileHandleForWriting] closeFile];

【讨论】:

    猜你喜欢
    • 2012-01-04
    • 2012-12-07
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多