Системный вызов Unix в Objective-C
-
19-09-2019 - |
Вопрос
Возможно ли выполнить системный вызов в Objective-C?
У меня есть следующий код:
if (!system("ls -l")) {
NSLog(@"Successfully executed");
} else {
NSLog(@"Error while executing the command");
}
Как получить результат?
Спасибо
Решение
Это идеальный кандидат для использования -[NSFileManager contentsOfDirectoryAtPath:error:]
вместо того, чтобы оборачивать встроенную функцию оболочки и анализировать выходные данные.Для команд общего назначения, где вам нужен вывод — и где в Cocoa нет эквивалентной функциональности "бесплатно" (просто требуется время для изучения доступных API) — NSTask как правило, это гораздо лучшая альтернатива, чем system()
.
Другие советы
Вы должны использовать NSTask.Если вам просто нужны результаты ls
, в Cocoa есть более подходящие оболочки файловой системы.
Если вам нравится делать это способом C, вы можете использовать popen
.Это также можно использовать для чтения выходных данных.Но ответы об использовании решений Objective-C, вероятно, являются лучшими.
Objective-C не запрещает программе вызывать system()
или любой из его эквивалентов.
CocoaTouch так и делает.