Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using a Single system() Call to Execute Multiple Commands in C

In an information security lab I'm working on, I've been tasked with executing multiple commands with a single call to "system()" (written in C, running on Fedora). What is the syntax that will allow me to execute more than command through system()? (The idea being you could execute arbitrary commands through a program running on a remote computer, if the program interacts with the OS through the system() call.)

I.e.:

char command[] = "????? \r\n"; 
system(command);
like image 487
Chance Avatar asked Oct 29 '08 02:10

Chance


People also ask

Can you run multiple commands in execute?

Try using the conditional execution & or the && between each command either with a copy and paste into the cmd.exe window or in a batch file. Additionally, you can use the double pipe || symbols instead to only run the next command if the previous command failed.

How do you run multiple commands?

Running Multiple Commands as a Single Job We can start multiple commands as a single job through three steps: Combining the commands – We can use “;“, “&&“, or “||“ to concatenate our commands, depending on the requirement of conditional logic, for example: cmd1; cmd2 && cmd3 || cmd4.

How do I run multiple terminal commands in one line?

Using the Semicolon (;) Operator Segmenting a chain of commands with the semicolon is the most common practice when you want to run multiple commands in a terminal.

What refers to the execution of multiple commands on a computer?

In computing, multitasking is the concurrent execution of multiple tasks (also known as processes) over a certain period of time. New tasks can interrupt already started ones before they finish, instead of waiting for them to end.


3 Answers

That depends on the shell being invoked to execute the commands, but in general most shells use ; to separate commands so something like this should work:

command1; command2; command3

[EDIT]

As @dicroce mentioned, you can use && instead of ; which will stop execution at the first command that returns a non-zero value. This may or may not be desired (and some commands may return non-zero on success) but if you are trying to handle commands that can fail you should probably not string multiple commands together in a system() call as you don't have any way of determining where the failure occured. In this case your best bet would either be to execute one command at a time or create a shell script that performs the appropriate error handling and call that instead.

like image 199
Robert Gamble Avatar answered Sep 22 '22 14:09

Robert Gamble


Use && between your commands. It has the advantage that it only continues executing commands as long as they return successful error codes. Example:

"cd /proc && cat cpuinfo"

like image 28
dicroce Avatar answered Sep 22 '22 14:09

dicroce


One possibility comes immediately to mind. You could write all the commands to a script then run it with:

system ("cmd.exe /c \"x.cmd\"");

or, now that I've noticed you're running on Fedora:

system ("x.sh");
like image 38
paxdiablo Avatar answered Sep 23 '22 14:09

paxdiablo