Отправка EOF в NSTask через NSPipe или NSFileHandle

У меня есть NSTask, который обрабатывает аргументы, переданные из стандартного ввода. Аргументы передаются через NSFileHandle.

Он работает нормально, но наш инструмент командной строки считывает ввод со стандартного ввода до тех пор, пока не получит символ EOF (нажав Ctrl+C).

Я не думаю, что смогу добавить символ EOF в строку ASCII, так какие же будут варианты? Любая обратная связь приветствуется!

Заранее спасибо!


person guitarflow    schedule 19.07.2013    source источник
comment
Ctrl-c не является EOF; это SIGINT (прерывание). Более того, EOF — это не символ; это конец файла. Итак, чтобы «отправить EOF», вы просто завершаете файл.   -  person Peter Hosey    schedule 19.07.2013
comment
@PeterHosey Технически, символ EOF, определенный ASCII, действительно существует, и он использовался. Но, по общему признанию, отправка этого символа в файл не поможет на Mac.   -  person Thomas Tempelmann    schedule 19.10.2019
comment
Ах да, символ конца передачи, также известный как Ctrl-D. en.wikipedia.org/wiki/Символ_конца_передачи   -  person Peter Hosey    schedule 09.04.2020


Ответы (1)


Вызов closeFile на записывающем конце канала сигнализирует о состоянии EOF:

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

[[inPipe fileHandleForWriting] writeData:...];
// ...
[[inPipe fileHandleForWriting] closeFile];
person Martin R    schedule 19.07.2013