가장 간단한 형태로 프로그램은 터미널 명령 만 실행합니까? 프로그램이거나 내부 OS API를 사용하여 이동합니까? 악의적

예를 들어 프로그램에서 하나의 폴더를 선택하고 다른 위치로 복사 할 수 있습니다. 기본적으로 터미널에서 실행할 수있는 명령을 실행하는 응용 프로그램이거나 내부 OS API를 사용하여 이동합니까?

악의적 인 답변을 남겨주세요. 나는 단지 13 세의 질문으로 인식 될 수 있다는 것이 궁금하고 완전히 알고 있습니다.



답변

개념 상으로는 항상 OS API를 사용합니다. 질문은 어떤 방식으로 만 진행됩니다. 본질적으로 세 가지 옵션이 있습니다.

  1. 저수준 OS API (시스템 호출)를 직접 사용합니다. 귀하의 예에서 작업은 매우 관련이 있습니다. 폴더의 항목 목록을 가져오고 유형 (폴더, 파일 …)을 확인하십시오. 각 항목은 대상 폴더에서 해당 항목을 작성하고 파일은 소스, 대상 파일 등에 쓰기 등. 작업이 너무 복잡하기 때문에 문제가 발생하기 쉽기 때문에 대부분의 응용 프로그램에서이를 피할 수 있습니다.

  2. 작업을 단순화하는 라이브러리 (API)를 사용하십시오. 예를 들어, Apple Cocoa 프레임 워크는 하위 수준의 OS API를 사용하여 모든 더러운 작업을 수행 NSFileManager하는 copyItemAtPath:toPath:error메소드를 클래스에 제공 하므로 응용 프로그램은 하위 수준의 API 자체를 사용할 필요는 없지만 적은 작업이 필요하고 항상 필요한 것에 의존 할 수 있습니다 시스템에 존재합니다. 또한 Apple은 잘 작동하는지 확인합니다.

  3. 외부 프로세스를 사용하여 작업을 수행하십시오. 이 경우 외부 프로세스는 위의 두 가지 방법 중 하나를 사용하여 작업을 수행합니다. 응용 프로그램은 이러한 프로세스를 시작하고 모니터링 한 후 완료 될 때까지 기다려야합니다. 이러한 프로세스는 명령 행 도구로 실행될 수 있으므로 터미널에서 실행할 수있는 명령 일 수 있습니다. 보장되지는 않지만 매우 가능합니다.

대부분의 응용 프로그램은 옵션 2를 1보다 간단하고 3보다 안전하고 효율적이기 때문에 옵션 2를 사용합니다. 외부 프로세스를 실행하려면 적절하게 설정해야하며 작업을 제어 할 수 없습니다. 예를 들어, 실패한 경우 정확히 무엇이 잘못되었는지 파악하기가 훨씬 어렵고 그것이 무엇을하고 있는지 알기가 어렵습니다 (예 : 진행 상황 표시). 그렇기 때문에 대부분의 경우 개발자는 옵션 2를 선택할 가능성이 있지만 보장 할 수는 없습니다. 주목할만한 예로는 설치 프로그램과 같이 사용자 지정을 위해 셸 스크립트를 사용하는 응용 프로그램이 있습니다.

고급 사용자 참고 사항 : dtraceOS X 기능을 사용 하여 특정 애플리케이션이 수행중인 작업을 찾을 수 있습니다. 예를 들어, 생성중인 프로세스를 확인할 수 있으므로 사용중인 도구를 볼 수 있습니다 (참조 execsnoop).


답변

나는 대답이 “의존하지만 보통 두 번째”인 것이 두렵다. 실제로 GUI 프로그램이 터미널 명령을 실행하더라도 API를 호출하여 실행합니다.

단순히 터미널 명령 목록 인 프로그램을 쉘 스크립트라고합니다. 이러한 프로그램은 Mac OS X에서 실행될 수 있지만, 출력을 보려면 터미널 창에서 실행하거나 GUI를 사용하는 프로그램을 실행해야합니다. 다른 프로그램은 내부 API를 통해 명령 행 프로그램을 호출 할 수 있습니다.

대부분의 개발 질문은이 사이트에서 주제를 벗어난 것이지만 실제로 주제가되는 한 가지 예는 Automator를 실행하는 것입니다.

Automator에서 생성 된 프로그램이 호출 할 수있는 내부 명령 목록 내의 옵션 중 하나는 쉘 스크립트 또는 터미널 명령 목록을 호출하는 기능입니다. 그러나 그것은 내부 API 내에서 사용 가능한 많은 옵션 중 하나입니다.

여기에 이미지 설명을 입력하십시오


답변

유닉스의 훌륭한 아이디어 중 하나는 프로그램에 대한 아이디어가 있다면 먼저 쉘 스크립트로 작성한다는 것입니다. 본질적으로 일련의 명령을 호출합니다.

그런 다음 프로그램이 유용한 것으로 판명되면 인터페이스를 개선하고 사용자가 테스트하도록하고 마지막으로 가치가 있다고 확신하면 “실제”프로그램을 작성하십시오.

물론 이것은 그래픽 사용자 인터페이스가 인수되기 이전의 것이기 때문에 “프로그램”은 CLI 명령 자체입니다.

일부 최신 프로그램, 특히 시스템 정보가 표시되는 경우에도 이러한 접근 방식이 계속 나타납니다. 폴더에있는 모든 파일을 나열하는 간단한 앱을 만들고 싶습니까? 그냥 실행 ls -al하고 결과를 구문 분석하고 표를 표시하십시오. 다양한 매개 변수를 가지고 재미 있고 버전 2.0에 대한 자료가 있습니다.


답변

터미널 명령을 실행하는 하나의 프로그램 클래스 (모두 API 호출로 시작하더라도)는 일식 또는 Xcode와 같은 통합 프로그램 개발 환경입니다. 프로그램 개발에 필요한 도구 모음은 IDE에 포함되어 유지 관리하기에 엄청나게 큽니다. 대신, makefile (일종의 스크립트)을 빌드하고 컴파일, 링크,로드 및 디버그 프로세스를 단계별로 수행하기 위해 유닉스 ‘make'(또는 이에 상응하는)로 실행합니다. 차례로 명령 행 인터페이스를 사용하여 컴파일러, 링커 등을 실행하십시오. 이를 통해 IDE는 프로그래머가 선택한 도구 세트와 상대적으로 독립적이며 도구 업데이트에 영향을받지 않습니다.


답변

응용 프로그램은 CLI 명령을 실행하여 특정 작업을 수행 할 수 있으며 실제로는 일부 작업을 수행 할 수 있습니다. 그러나 효율성 문제로 인해 전문 응용 프로그램 개발자는 명령 실행을 피하고 명령이 필요한 작업을 수행하는 데 사용하는 API 를 사용합니다.


답변