一 代碼結構
二 代碼
1. posix_process.h
/************************************************************************* > File Name: posix_process.h > Author: wangzhicheng > Mail: [email protected] > Created Time: Thu 12 Feb 2015 07:35:34 PM WST ************************************************************************/ #ifndef POSIX_PROCESS_H #define POSIX_PROCESS_H #include#include #include #include #include #include #include #include using namespace std; /* * posix process class * */ class POSIX_PROCESS { protected: pid_t mPid; posix_spawnattr_t mSpawnattr; posix_spawn_file_actions_t mFileactions; char **mArgv; char **mEnvp; string mProgram_path; public: POSIX_PROCESS(const string &program_path, char **argv, char **envp); POSIX_PROCESS(const string &program_path, char **argv, char **envp, posix_spawnattr_t &X, \ posix_spawn_file_actions_t &Y); void run(void); void join(int &value); }; #endif
/************************************************************************* > File Name: posix_process.cpp > Author: wangzhicheng > Mail: [email protected] > Created Time: Thu 12 Feb 2015 07:50:36 PM WST ************************************************************************/ #include "posix_process.h" POSIX_PROCESS::POSIX_PROCESS(const string &program_path, char **argv, char **envp) { this->mArgv = argv; this->mEnvp = envp; this->mProgram_path = program_path; posix_spawnattr_init(&this->mSpawnattr); posix_spawn_file_actions_init(&this->mFileactions); } POSIX_PROCESS::POSIX_PROCESS(const string &program_path, char **argv, char **envp, posix_spawnattr_t &X, posix_spawn_file_actions_t &Y) { this->mArgv = argv; this->mEnvp = envp; this->mProgram_path = program_path; this->mSpawnattr = X; this->mFileactions = Y; posix_spawnattr_init(&this->mSpawnattr); posix_spawn_file_actions_init(&this->mFileactions); } void POSIX_PROCESS::run(void) { posix_spawn(&this->mPid, this->mProgram_path.c_str(), &this->mFileactions, &this->mSpawnattr, \ this->mArgv, this->mEnvp); } void POSIX_PROCESS::join(int &value) { wait(&value); }
/************************************************************************* > File Name: schedule.cpp > Author: wangzhicheng > Mail: [email protected] > Created Time: Thu 12 Feb 2015 08:01:44 PM WST ************************************************************************/ #include "posix_process.h" int main(int argc, char **argv, char **envp) { string program_path; cin >> program_path; POSIX_PROCESS process(program_path, argv, envp); int value; process.run(); process.join(value); return 0; }
CC=g++ all: $(CC) -g -o main schedule.cpp posix_process.cpp posix_process.h