Fred Staff
Posts : 33 Join date : 2010-05-27 Age : 31 Location : Oklahoma
| Subject: Basic Shell [C++] Thu Jun 03, 2010 2:43 pm | | | Something my father showed me awhile back, quite a good resource if you want to program a computer. - Code:
-
#include <iostream> #include <unistd.h>
int main() { int rv = system("ls -l ~/"); std::cout << "result code: " << rv << "\n"; return 0; }
Here's an example of doing it the hard way.
#include <iostream> #include <cstdio> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h>
int main() { int kidstatus, deadpid;
pid_t kidpid = fork(); if (kidpid == -1) { std::cerr << "fork error " << errno << ", " << std::strerror(errno) << "\n"; return 1; } if (kidpid == 0) { // okay, we're the child process. Let's transfer control // to the ls program. "ls" in both of the spots in the list // is not a mistake! Only the second argument on are argv. // note the NULL at the end of the list, you need that. #if 0 // this version uses the shell. int rv = execlp("/bin/sh", "/bin/sh", "-c", "ls -l /var/log", NULL); #else // this version runs /bin/ls directly. int rv = execlp("/bin/ls", "/bin/ls", "-l", "/var/log/", NULL); #endif // if the execlp is successful we never get here: if (rv == -1) { std::cerr << "execlp error " << errno << ", " << std::strerror(errno) << "\n"; return 99; } return 0; } // we only get here if we're the parent process. deadpid = waitpid(kidpid, &kidstatus, 0); if (deadpid == -1) { std::cerr << "waitpid error " << errno << ", " << std::strerror(errno) << "\n"; return 1; } std::cout << "child result code: " << WEXITSTATUS(kidstatus) << "\n"; return 0; }
Credit: d4rk_bunneh |
|