File: libc.info, Node: Running a Command, Next: Process Creation Concepts, Up: Processes
26.1 Running a Command
======================
The easy way to run another program is to use the 'system' function.
This function does all the work of running a subprogram, but it doesn't
give you much control over the details: you have to wait until the
subprogram terminates before you can do anything else.
-- Function: int system (const char *COMMAND)
Preliminary: | MT-Safe | AS-Unsafe plugin heap lock | AC-Unsafe
lock mem | *Note POSIX Safety Concepts::.
This function executes COMMAND as a shell command. In the GNU C
Library, it always uses the default shell 'sh' to run the command.
In particular, it searches the directories in 'PATH' to find
programs to execute. The return value is '-1' if it wasn't
possible to create the shell process, and otherwise is the status
of the shell process. *Note Process Completion::, for details on
how this status code can be interpreted.
If the COMMAND argument is a null pointer, a return value of zero
indicates that no command processor is available.
This function is a cancellation point in multi-threaded programs.
This is a problem if the thread allocates some resources (like
memory, file descriptors, semaphores or whatever) at the time
'system' is called. If the thread gets canceled these resources
stay allocated until the program ends. To avoid this calls to
'system' should be protected using cancellation handlers.
The 'system' function is declared in the header file 'stdlib.h'.
*Portability Note:* Some C implementations may not have any notion of
a command processor that can execute other programs. You can determine
whether a command processor exists by executing 'system (NULL)'; if the
return value is nonzero, a command processor is available.
The 'popen' and 'pclose' functions (*note Pipe to a Subprocess::) are
closely related to the 'system' function. They allow the parent process
to communicate with the standard input and output channels of the
command being executed.