popen
позволяет запустить программу и получить дескриптор файла для ввода или вывода, так же, как fopen
работает для файлов.Например, если вы хотите прочитать вывод вашей программы, вы должны использовать popen("program", "r")
.С другой стороны, если вы хотите записать на его вход, вы должны использовать popen("program", "w")
.Mac OS X также допускает r+
, что позволяет читать выходные данные и записывать их на вход, но эта возможность не является стандартной и не должна использоваться для кросс-платформенного кода.
Если вы простоЕсли вы хотите запустить программу, вы также можете использовать функцию system
, которая делает это и ожидает выхода из программы, после чего она возвращает код состояния.system
фактически вызывает оболочку для работы, поэтому аргументы будут расширяться (переменные окружения, ~ и т. Д.).
РЕДАКТИРОВАТЬ После вашего комментария, что system("Microsoft Word.app")
не работает как выЯ ожидаю: на самом деле есть несколько причин.Начиная с сообщения, которое вы получаете: это потому, что то, что вы написали, эквивалентно открытию окна терминала и вводу Microsoft Word.app
.Другими словами, он пытается найти программу под названием «Microsoft», а затем передать ей аргумент «Word.app».Вам нужно было бы либо заключить в кавычки имя программы или пробелы, чтобы оболочка поняла, что это целое имя программы, а не имя программы, а затем аргумент: system("Microsoft\ Word.app")
Теперь следует жаловаться, что оболочка можетне находит программу «Microsoft Word.app», которая уже является шагом вперед.
Это потому, что в Mac OS app
файлы не являются исполняемыми файлами: это папки, которые отображает Finderкак один файл.Вы можете убедиться в этом, нажав Ctrl + щелкнув (или щелкнув правой кнопкой мыши) приложение и выбрав «Показать содержимое пакета» (откроется папка приложения).Фактический исполняемый файл для Microsoft Word.app должен быть где-то по пути Microsoft Word.app/Contents/MacOS/Microsoft Word
.
Как видите, это становится довольно сложным.К счастью, Apple предоставляет исполняемый файл open
, который может использовать кучу сервисов ОС для выяснения этих деталей.Это позволяет запускать приложения следующим образом:
open -a Microsoft\ Word
Это должно запустить Word.(Обратите внимание, что вам по-прежнему нужно избегать пробелов.) В чистом коде C это даст вам что-то вроде этого:
system("open -a Microsoft\\ Word");
Если вы решите использовать Objective-C и Cocoaоднако есть очень простой способ открывать приложения:
NSString* appName = @"Microsoft Word"; // no escape!
[[NSWorkspace sharedWorkspace] launchApplication:appName];
NSString
объекты могут быть созданы из строки C достаточно легко:
NSString* appName = [[NSString alloc] initWithCString:programName encoding:NSUTF8StringEncoding];
[[NSWorkspace sharedWorkspace] launchApplication:appName];
[appName release];