[...]
PORTABILITY
ANSI C requires `system', but leaves the nature and effects of a command processor undefined. ANSI C does, however, specify that `system(NULL)' return zero or nonzero to report on the existence of a command processor.
POSIX.2 requires `system', and requires that it invoke a `sh'. Where `sh' is found is left unspecified.
Радуют иногда маны. ANSI C требует, чтобы вызов system() существовал, но не описывает, что именно он должен делать. Тем не менее, стандарт требует, чтобы можно было проверить, делает ли что-то system(), вызвав system(NULL). POSIX.2 требует, чтобы при использовании system() вызывался 'sh', но не говорит, где брать sh (особенно в windows NT, которая сертифицирована по POSIX (правда, POSIX.1), но никакими sh в которой и не пахнет).
Особенно радует, что всё это я выяснил, перетаскивая мелкую счётную программку самого конца прошлого века (ещё под дос) под cygwin. Некрокомпьютинг рулит, да :-)