Issuing system commands in Linux from C, C++

前端 未结 4 761
自闭症患者
自闭症患者 2020-11-27 21:50

I know that in a DOS/Windows application, you can issue system commands from code using lines like:

system(\"pause\");

or

s         


        
相关标签:
4条回答
  • 2020-11-27 22:36

    I think what you are looking for are fork and exec.

    0 讨论(0)
  • 2020-11-27 22:45

    system is a bad idea for several reasons:

    • Your program is suspended until the command finishes.
    • It runs the command through a shell, which means you have to worry about making sure the string you pass is safe for the shell to evaluate.
    • If you try to run a backgrounded command with &, 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.
    • There's no way to read the command's output back into your program.

    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.

    0 讨论(0)
  • 2020-11-27 22:51

    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.

    0 讨论(0)
  • 2020-11-27 22:56

    Well, lsmod does it by parsing the /proc/modules file. That would be my preferred method.

    0 讨论(0)
提交回复
热议问题