고려해야 할 몇 가지 요소가 있습니다. 하나의 핵심 요소는 외부 프로그램이 소프트웨어가 설치된 모든 시스템에 있는지 여부에 대한 신뢰성입니다. 그것이 누락 될 가능성이 있다면, 아마 당신의 프로그램 안에서 그것을하는 것이 더 나을 것입니다.
무게가 가중되면 프로그램에로드 된 여분의 코드가 너무 길다는 것을 고려해 볼 수 있습니다. 응용 프로그램의 거의 사용하지 않는 부분에는 코드가 부 풀릴 필요가 없습니다.
system() 함수는 편리하지만 일반적으로 쉘을 호출하기 때문에 위험합니다. fork() 및 exec() 시스템 호출을 통해 Unix에서 직접 프로그램을 호출하는 것이 더 나을 것입니다. [우연히 시스템 호출이 system()
함수를 호출하는 것과 매우 다릅니다!] OTOH, 프로그램에서 열려있는 파일 디스크립터가 모두 닫혀 있는지 걱정할 필요가 있습니다 - 특히 프로그램이 대신 실행되는 데몬 일 경우 다른 사용자; 특별한 권한을 사용하지 않는다면 문제가 적지 만 호출 된 프로그램이 의도하지 않은 것에 대한 액세스 권한을 부여하지 않는 것이 좋습니다. fcntl()
시스템 호출과 FD_CLOEXEC
플래그를 확인해야 할 수 있습니다.
일반적으로 기능을 프로그램에 빌드하면 사물을 제어하기가 더 쉽지만 사소한 결정은 아닙니다.
그냥 저녁 나는 작은 Perl 유틸리티 프로그램 몇 개를 살펴보고 File :: Copy - 새로운 버전이 더 짧고 Windows 대신 모든 플랫폼에서 작동하는 copy 명령에 대한 시스템 호출을 사용하여 바뀌었다. – Sol