18 votos

En su forma más simple, los programas sólo tiene que ejecutar los comandos de terminal?

Digamos, por ejemplo, en un programa que me permite seleccionar una carpeta y copiar a otra ubicación, en un nivel muy básico es que la aplicación que se ejecuta comandos que se podía ejecutar en la terminal o es el uso de algunos internos OS API para hacer que se mueva?

Por favor perdoname vicioso respuestas; sólo soy curioso y totalmente consciente de que puede ser percibido como una cuestión de 13 años podría pedir.

11voto

Simon Urbanek Puntos 246

Conceptualmente, se utiliza siempre OS API - la cuestión es sólo de qué manera. Hay, esencialmente, tres opciones.

  1. el uso de nivel del sistema operativo de la API (llamadas al sistema) directamente. En su ejemplo, la tarea es bastante complicado: obtener la lista de elementos en la carpeta, marque el tipo (carpeta, archivo ...), para cada uno de ellos crear el elemento correspondiente en la carpeta de destino para los archivos de leer el contenido de la fuente, escribir en el archivo de destino, etc. Dado que la tarea es tan compleja, que no es fácil conseguir algo mal, así que la mayoría de las aplicaciones de evitar esto.

  2. el uso de una biblioteca (API) que simplifica la tarea. Por ejemplo, el Apple marco de Cacao proporciona NSFileManager de la clase con la copyItemAtPath:toPath:error método que hace todo el trabajo sucio utilizando nivel del sistema operativo de la API, por lo que la aplicación no tenga que usar la API de bajo nivel en sí, pero puede confiar en algo que requiere menos trabajo y siempre está presente en el sistema. También Apple es probable que asegurarse de que funciona bien.

  3. el uso de un proceso externo a hacer la tarea. En este caso el proceso externo utilizando uno de los dos métodos anteriores para hacer el trabajo. La aplicación se ha de iniciar el proceso, supervisar y esperar hasta que esté hecho. Es probable que ese proceso se puede ejecutar como una herramienta de línea de comandos, por lo que esta podría ser una de comando se puede ejecutar en la Terminal. No está garantizado, pero muy posible.

La mayoría de las aplicaciones utilice la opción 2. porque es más sencillo de lo que 1. y más seguro y eficiente que la de 3. Con el fin de ejecutar un proceso externo que usted necesita para configurarlo correctamente y usted no tiene control sobre lo que hace. Por ejemplo, es mucho más difícil de averiguar exactamente lo que salió mal en caso de un fallo y es difícil saber lo que está haciendo (por ejemplo, mostrar el progreso). Es por eso que en la mayoría de los casos los desarrolladores es probable que elija la opción 2, pero no hay ninguna garantía. Un ejemplo notable son las aplicaciones que utilizan secuencias de comandos de shell para la personalización - tales como instaladores.

Usuario avanzado nota: puede utilizar dtrace instalación de OS X para averiguar lo que una aplicación en particular está haciendo. Por ejemplo, usted puede comprobar cualquiera de los procesos es de desove, por lo que se podría ver las herramientas que está utilizando (consulte execsnoop).

4voto

TraFoO Puntos 11

Me temo que la respuesta es "depende, pero por lo general el segundo." En realidad, incluso si una interfaz gráfica de usuario se está ejecutando un programa de terminal de comandos, se ejecuta ellos por llamar a una API.

Un programa que es simplemente una lista de los comandos de terminal que se llama una secuencia de comandos de shell. Tales programas pueden ejecutar en Mac OS X, pero tienen que ejecutar en una ventana de Terminal o el lanzamiento de un programa que utiliza la interfaz gráfica de usuario si desea ver su salida. Otros programas pueden llamar a la línea de comandos a través de programas internos de la Api.

Mientras que la mayoría de preguntas de desarrollo que están fuera del tema de este sitio, un ejemplo que es en realidad en el tema involucra la ejecución de Automator.

Una opción dentro de la lista de los comandos internos de un programa creado en Automator puede llamar es la capacidad de llamar a un script de shell, o de la lista de comandos de Terminal. Pero eso es sólo una de muchas opciones disponibles dentro de su API interna.

enter image description here

2voto

Tyler Crompton Puntos 113

Una de las grandes ideas detrás de Unix es (era) que si tienes una idea para un programa, a continuación, primero se escribe como una secuencia de comandos de shell - esencialmente llamar a una serie de comandos.

Entonces, si el programa ha demostrado ser útil, podría mejorar en su interfaz, los usuarios de prueba, y finalmente, cuando se convenció de que valía la pena, escribe una "real" del programa.

Esto, por supuesto, fue antes de interfaces gráficas de usuario asumió, entonces, un "programa" aquí hay un comando de la CLI en sí mismo.

Aún se puede ver este tipo de enfoque en algunos programas modernos, especialmente si muestran información del sistema. Queremos construir una aplicación sencilla para la lista de todos los archivos en una carpeta? Sólo tiene que ejecutar ls -al, analizar el resultado y mostrar una tabla. Diviértete con los diferentes parámetros, y que tienen su material para la versión 2.0

1voto

XTL Puntos 690

Las aplicaciones se pueden ejecutar los comandos de la CLI para realizar una tarea determinada, y algunos realmente hacer; pero debido a temas de eficiencia, profesionales desarrolladores de aplicaciones para evitar que se ejecute el comando y en su lugar usar la Api de que el comando se utiliza para realizar la tarea requerida.

1voto

Adam V Puntos 2774

Una clase de programas que se ejecutan los comandos de terminal (aunque todo comienza con una llamada a la API) es el programa integrado-entornos de desarrollo como eclipse o Xcode. La colección de herramientas necesarias para el desarrollo del programa es excesivamente grande para ser contenida, y mantiene, una IDE. En su lugar, se construye un makefile (una especie de guión) y lo ejecuta con unix 'hacer' (o equivalente) para el paso a través de la compilación, enlace, carga, y el proceso de depuración. Realizar, a su vez, se ejecuta el compilador, enlazador, etc. mediante sus interfaces de línea de comando. Esto permite que el IDE de ser relativamente independiente de la herramienta de conjunto elegido por el programador, e insensible a las actualizaciones de las herramientas.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X