I know that in a DOS/Windows application, you can issue system commands from code using lines like:
system("pause");
or
system("myProgram.exe");
...from stdlib.h. Is there a similar Linux command, and if so which header file would I find it in?
Also, is this considered bad programming practice? I am considering trying to get a list of loaded kernal modules using the lsmod
command. Is that a good idea or bad idea? I found some websites that seemed to view system calls (at least system("pause");) in a negative light.
system
is a bad idea for several reasons:
&
, it ends up being a grandchild process and gets orphaned and taken in by the init
process (pid 1), and you have no way of checking its status after that.For the first and final issues, popen
is one solution, but it doesn't address the other issues. You should really use fork
and exec
(or posix_spawn
) yourself for running any external command/program.
Not surprisingly, the command is still
system("whatever");
and the header is still stdlib.h
. That header file's name means "standard library", which means it's on every standard platform that supports C.
And yes, calling system()
is often a bad idea. There are usually more programmatic ways of doing things.
If you want to see how lsmod
works, you can always look-up its source code and see what the major system calls are that it makes. Then use those calls yourself.
A quick Google search turns up this link, which indicates that lsmod
is reading the contents of /proc/modules
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With