Here is an example of using Emacs with arguments and options. It assumes you have a Lisp program file called hack-c.el which, when loaded, performs some useful operation on the current buffer, expected to be a C program.
emacs -batch foo.c -l hack-c -f save-buffer >& log
This says to visit foo.c, load hack-c.el (which makes changes in the visited file), save foo.c (note that save-buffer is the function that C-x C-s is bound to), and then exit back to the shell (because of -batch). -batch also guarantees there will be no problem redirecting output to log, because Emacs will not assume that it has a display terminal to work with.