Progtwig de la command-line C a Swift

Tengo el código fuente de un C game línea de command C game , que espera el stdin del usuario y produce stdout . Quiero dar input desde un campo de text hasta el main de este código C y tomar la salida en un campo de área de text, por ejemplo.

 int mainer(int argc, char **argv) { int i; int hitme; char ch; prelim(); if (argc > 1) { // look for -f option if (strcmp(argv[1], "-f")== 0) { coordfixed = 1; argc--; argv++; } } if (argc > 1) { fromcommandline = 1; line[0] = '\0'; while (--argc > 0) { strcat(line, *(++argv)); strcat(line, " "); } } else fromcommandline = 0; // some other code } 

A partir del ejemplo aquí , debería hacer lo siguiente:

 let args = [" ", "regular", "short", ""] var cargs = args.map { strdup($0) } let result = mainer(Int32(args.count), &cargs) for ptr in cargs { free(ptr) } 

¿Cómo podría llamar a la main function , y mantenerla viva y seguir dándole arguments para que actúe como command line .

Configuraré tu aplicación con TextArea y TextField, y ofreceré alternativas a printf y scanf que agreguen text al área de text o reciban text enviado del campo de text (tal vez con un button "Enter" UIB). Luego puede comstackr el código C y llamarlo desde Swift. El objective C está realmente bajo las coberturas, por lo que debería poder hacer que esto funcione con solo un poco de alteración.

Para que el código se ejecute, es probable que tengas que ejecutar este código en su propio subprocess y saltar a través de algunos aros para que esas llamadas se comporten correctamente, pero debería ser factible.

No creo que este sea el lugar adecuado para hacer esto. El propósito principal es esencialmente poner en marcha la aplicación y luego controlar los pases a Delegado de la aplicación y proceder desde allí. De la documentation de Apple: "Con pocas excepciones, nunca debe cambiar la implementación de la function principal que proporciona Xcode" . https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle. html

Hay otras forms de mezclar C con Objective-C. Si necesita llamar a C, es probable que el mejor lugar sea la vista donde se necesitan estos datos. Estos enlaces pueden ayudar: Mezclar funciones C en una class Objective-C ,

No llame a esa function en su process.

En su lugar, ejecute su juego de command-line como un process separado para que pueda conectar su stdin / stdout a las tuberías. Luego, puede enviar el contenido de su campo de text a un solo tubo y leer el resultado del otro.

Eche un vistazo a, por ejemplo, http://practicalswift.com/2014/06/25/how-to-execute-shell-commands-from-swift/ .