start
является внутренней командой cmd.exe
;это не программа сама по себе.Для запуска start
вам нужно запустить cmd.exe
и заставить cmd.exe
выполнить start
.
Функция system()
C выполняет оболочку (вероятно, cmd.exe
в Windows) и передаетаргумент этой оболочки - и start
«работает».
Функции exec*
не загружают оболочку - и start
сам по себе «не работает»: он должен быть«внутри» cmd.exe
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void) {
// system "works"
system("start C:\\tmp");
// this don't work
execl("start", "start", "C:\\Windows", (char*)0);
printf("Oops: execl with start failed\n");
// this "works"
execl("C:\\Windows\\System32\\cmd.exe", "start", "/c", "start", "C:\\Windows\\", (char*)0);
printf("Oops: execl with <path>\\cmd.exe failed\n");
return 0;
}