именованная труба в какао - PullRequest
       1

именованная труба в какао

1 голос
/ 28 сентября 2010

Мне нужна высокопроизводительная связь между двумя приложениями. Я попробовал AppleEvent, но это не очень хороший вариант. Я думал использовать именованную трубу, но я не знаю, как использовать их в COCOA.

Заранее спасибо за помощь:)

Ответы [ 2 ]

6 голосов
/ 28 сентября 2010

Нет особого способа сделать это в Какао. Вы в основном сделали бы fifo, и как только у вас это получилось, ваш процесс мог затем прочитать / записать его, используя стандартные обертки Cocoa, такие как NSFileHandle. Вы можете проверить его существование с помощью NSFileManager или чего-либо еще, но вам все равно придется вызвать mkfifo(2) в какой-то момент, чтобы создать именованный канал.

Итак:

if( mkfifo("/tmp/my_named_pipe", 0644) == -1 ) {
  // some error handling
  abort();
}

// Open and use the fifo as you would any file in Cocoa, but remember that it's a FIFO
NSFileHandle* fifoIN = [NSFileHandle fileForReadingAtPath:@"/tmp/my_named_pipe"];

Лично я бы рекомендовал вместо этого использовать сокет BSD или Unix. Существует много поддержки Framework для сокетов, иногда двунаправленный канал также более полезен, и вам не придется беспокоиться о том, готов ли читатель или писатель сначала.

2 голосов
/ 29 сентября 2010

Есть альтернативы именованным каналам:

  • Розетки, как уже упоминал Джейсон Коко.
  • Сообщения порта Маха. Скорее всего, это самый высокопроизводительный вариант, поскольку эта функция в значительной степени предназначена для Маха.
  • Распределенные объекты. Реализованный поверх портов (и я считаю, что вы можете использовать либо порты сокетов, либо порты Маха), это самый простой вариант, поскольку вы отправляете сообщения «удаленным» объектам (отправляемым другими процессами) так же, как вы их отправляете к локальным объектам (созданным в вашем собственном процессе).
...