將建立程式的API-posix_spawn封裝成一個程式類
將建立程式的API封裝成一個程式類,用該類生成一個物件,則建立了一個程式;
主要API函式為:
#include <spawn.h>
int posix_spawn(pid_t *restrict pid, const char *restrict path,
const posix_spawn_file_actions_t *file_actions,
const posix_spawnattr_t *restrict attrp,
char *const argv[restrict], char *const envp[restrict]);
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
#include <spawn.h>
int posix_spawn_file_actions_destroy(posix_spawn_file_actions_t *
file_actions);
int posix_spawn_file_actions_init(posix_spawn_file_actions_t *
file_actions);
#include <spawn.h>
int posix_spawnattr_destroy(posix_spawnattr_t *attr);
int posix_spawnattr_init(posix_spawnattr_t *attr);
MyProcess.h
/*************************************************************************
> File Name: MyProcess.h
> Author:
> Mail:
> Created Time: 2015年12月14日 星期一 20時13分03秒
************************************************************************/
#ifndef _MYPROCESS_H
#define _MYPROCESS_H
#include <iostream>
#include <spawn.h>
#include <string>
#include <sys/wait.h>
using std::string;
class MyProcess{
public:
MyProcess(string path, char **av, char **ep);
MyProcess(string path, char **av, char **ep, posix_spawn_file_actions_t psfa, posix_spawnattr_t attr);
void run();
void pwait(int *x);
private:
pid_t pid;
posix_spawn_file_actions_t file_actions;
posix_spawnattr_t attrp;
char **argv;
char **envp;
string ProgramPath;
};
#endif
MyProcess.cpp
/*************************************************************************
> File Name: MyProcess.cpp
> Author:
> Mail:
> Created Time: 2015年12月14日 星期一 20時19分58秒
************************************************************************/
#include "MyProcess.h"
using namespace std;
MyProcess::MyProcess(string path, char **av, char **ep)
{
ProgramPath = path;
argv = av;
envp = ep;
posix_spawn_file_actions_init(&file_actions);
posix_spawnattr_init(&attrp);
}
MyProcess::MyProcess(string path, char **av, char **ep, posix_spawn_file_actions_t psfa, posix_spawnattr_t attr)
{
ProgramPath = path;
argv = av;
envp = ep;
file_actions = psfa;
attrp = attr;
posix_spawn_file_actions_init(&file_actions);
posix_spawnattr_init(&attrp);
}
void MyProcess::run()
{
posix_spawn(&pid, ProgramPath.c_str(), &file_actions, &attrp, argv, envp);
}
void MyProcess::pwait(int *x)
{
wait(x);
}
main.cpp
/*************************************************************************
> File Name: main.cpp
> Author:
> Mail:
> Created Time: 2015年12月14日 星期一 20時04分46秒
************************************************************************/
#include "MyProcess.h"
#include <cstdlib>
using namespace std;
#define PROCESSNUM 2
int main(int argc, char *argv[])
{
int wait_val[2];
if (argc < 2){
cout << "the argc is less than 3" << endl;
exit(-1);
}
MyProcess child1("ls", argv, NULL);
MyProcess child2("/bin/ps", argv, NULL);
child1.run();
child2.run();
child1.pwait(&wait_val[0]);
child1.pwait(&wait_val[1]);
cout << "child1.pwait is " << wait_val[0] << endl;
cout << "child2.pwait is " << wait_val[1] << endl;
exit(0);
}
下圖才是程式的執行結果:(將下面的執行結果與上圖比較,證明程式正確)
相關文章
- 將建立執行緒的API-pthread_create封裝成一個執行緒類執行緒APIthread封裝
- 一個C#封裝的加密解密類程式碼C#封裝加密解密
- 驗證碼 生成 二三例(一般處理程式,封裝一個類)封裝
- 一個最簡單的類JQuery封裝jQuery封裝
- 一、類的封裝性封裝
- 將CKEditor.NET和CKFinder.NET封裝成一個控制元件封裝控制元件
- 如何把JAVA程式封裝成EXE檔案Java封裝
- 【JavaScript框架封裝】實現一個類似於JQuery的動畫框架的封裝JavaScript框架封裝jQuery動畫
- Android Room封裝成一個類似Redis的快取資料庫的效果AndroidOOM封裝Redis快取資料庫
- 將自己寫的經常複用的類封裝成動態庫的方法封裝
- 安裝cTex並建立第一個tex程式
- (3)Tcp Socket程式設計的封裝類 TcpListener/TcpClientTCP程式設計封裝client
- PHP封裝的一個單例模式Mysql操作類PHP封裝單例模式MySql
- 程式碼改變世界 | 如何封裝一個簡單的 Koa封裝
- 第三個OpenGL程式,shaders _ 後續 之 封裝著色器類封裝
- 命令模式-將請求封裝成物件模式封裝物件
- 工廠模式-將物件的建立封裝起來模式物件封裝
- 【JavaScript框架封裝】實現一個類似於JQuery的CSS樣式框架的封裝JavaScript框架封裝jQueryCSS
- 將PL/SQL程式碼封裝在靈巧的包中SQL封裝
- 如何封裝一個自動歸、解檔類封裝
- 建立一個簡單的小程式
- Java類的設計和封裝及類成員的訪問控制Java封裝
- ScaleHeight 的封裝程式碼封裝
- 封裝一個通用的PopupWindow封裝
- gePlugin封裝成winform控制元件,一行程式碼即可載入。Plugin封裝ORM控制元件行程
- 建立一個程式並呼叫(.net)
- [封裝] 小程式直連 oss 上傳檔案JS類封裝JS
- Javascript 物件導向程式設計(一):封裝JavaScript物件程式設計封裝
- 【菜鳥學Java】3:封裝一個分頁類PageBeanJava封裝Bean
- 封裝我們的VBA程式碼封裝
- 微信小程式元件封裝微信小程式元件封裝
- java輔助開發的兩個封裝類Java封裝
- 封裝一個自己的js庫封裝JS
- 一個簡單的 Amqp 封裝MQ封裝
- php的curl封裝類PHP封裝
- 封裝xunsearch類封裝
- JS 封裝類JS封裝
- 小程式的canvas繪圖的封裝Canvas繪圖封裝