2016-04-21 4 views

ответ

0

Другие, чем вы пишете в CI не имеют ни малейшего представления о том, как много вы знаете о C, «Unix» и какао I/O - поэтому некоторые из этого вы можете уже знаем.

Это одно возможное решение, оно выглядит сложнее, чем оно есть.

Reading:

  • Вы должны понимать системные вызовы pipe, dup2 и read.
  • Вам необходимо понять функцию GCD dispatch_async и как получить очередь GCD.
  • и dup2 часто используются вместе с fork и exec для запуска процесса и записи/чтения/чтения стандартного ввода-вывода процесса. То, что вы будете делать, использует одни и те же основные идеи, поэтому поиск примеров этого общего шаблона поможет вам понять, как работают эти вызовы. Вот несколько заметок из университета: Pipe, Fork, Exec and Related Topics.

Outline:

Использование dispatch_async расписание блок для обработки чтения и записи данных. Блок будет:

  1. Использования pipe Чтобы создать канал и dup2 Для подключения стандартного вывода - файловый дескриптор 1 - это.
  2. Введите петлю, которая использует read для получения доступных данных из трубы. Чтение данных будет в байтовом массиве.
  3. В цикле преобразования считанных байтов в NSString
  4. Внутри цикла добавить эту строку в ваш взгляд - вы необходимо сделать это в основном потоке, как она включает в себя пользовательский интерфейс, и вы можете сделать это с помощью другого dispatch_async указав основную очередь.

Все. Теперь ваш блок будет выполняться одновременно в фоновом режиме, записывая все, что ваш C-код записывает на стандартный вывод и добавляет его в ваше представление.

Если вы застряли, вы можете задать новый вопрос, содержащий код, который вы написали, и описание того, что не работает.

HTH

Смежные вопросы