diff options
author | axel <axel@liljencrantz.se> | 2005-09-20 23:26:39 +1000 |
---|---|---|
committer | axel <axel@liljencrantz.se> | 2005-09-20 23:26:39 +1000 |
commit | 149594f974350bb364a76c73b91b1d5ffddaa1fa (patch) | |
tree | 95650e9982d5fabe4bd805d94c5d700cbbc1ca7f /exec.h |
Initial revision
darcs-hash:20050920132639-ac50b-fa3b476891e1f5f67207cf4cc7bf623834cc5edc.gz
Diffstat (limited to 'exec.h')
-rw-r--r-- | exec.h | 43 |
1 files changed, 43 insertions, 0 deletions
@@ -0,0 +1,43 @@ +/** \file exec.h + Prototypes for functions for executing a program +*/ + +/** + Execute the processes specified by j. + + I've put a fair bit of work into making builtins behave like other + programs as far as pipes are concerned. Unlike i.e. bash, builtins + can pipe to other builtins with arbitrary amounts of data, and so + on. To do this, after a builtin is run in the real process, it + forks and a dummy process is created, responsible for writing the + output of the builtin. This is surprisingly cheap on my computer, + probably because of the marvels of copy on write forking. + + This rule is short circuted in the case where a builtin does not + output to a pipe and does in fact not output anything. The speed + improvement from this optimization is not noticable on a normal + computer/OS in regular use, but the promiscous amounts of forking + that resulted was responsible for a huge slowdown when using + Valgrind as well as when doing complex command-specific + completions. + + +*/ +void exec( job_t *j ); + +/** + Evaluate the expression cmd in a subshell, add the outputs into the + list l. On return, the status flag as returned bu \c + proc_gfet_last_status will not be changed. + + \param cmd the command to execute + \param l The list to insert output into.If \c l is zero, the output will be discarded. + + \return the status of the last job to exit, or -1 if en error was encountered. +*/ +int exec_subshell( const wchar_t *cmd, + array_list_t *l ); + +void exec_free_io_buffer( io_data_t *io_buffer ); +io_data_t *exec_make_io_buffer(); + |