多程式程式設計函式posix_spawn例項
#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]);
在main函式中呼叫該函式可以將一個可執行檔案執行起來;如下面所示:
posix_spawn(&child_pid, "ls", NULL, NULL, argv, NULL);
執行完該函式之後,會將該目錄下的ls可執行程式執行起來,會輸出該目錄下的檔案;
argv引數可有可無,在例子中,如果沒有帶引數,那麼直接執行ls;也可以帶上引數-l,那麼直接執行ls -l,則以列表的形式顯示該目錄下的檔案;
在第二個例子中,引數是test.txt,那麼對於第一個程式,則執行 ls test.txt,則輸出test.txt;對於第二個程式,則執行cat test.txt輸出test.txt的內容;
在例子二中吊起了兩個可執行檔案ls 和 cat(這兩個檔案是我從/bin目錄下直接拷貝過來的,也可以自己生成一個可執行檔案,只是這裡我太懶了。。。。。)
wait(&wait_val);
剛才執行的程式的返回值輸入到wait_val中;(感覺我例子二中有一點問題,第一個wait也有可能會得到的是第二個吊起的程式,不過這個例子得到的確實是正確的)
例項一:
/*************************************************************************
> File Name: useposix_spawn.cpp
> Author:
> Mail:
> Created Time: 2015年12月14日 星期一 14時21分52秒
************************************************************************/
#include <iostream>
#include <spawn.h>
#include <string.h>
#include <sys/wait.h>
#include <cstdlib>
#include <error.h>
using namespace std;
/*
#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]);
*/
int main(int argc, char *argv[])
{
pid_t child_pid;
int ret;
int wait_val;
cout << "This is main process......" << endl;
ret = posix_spawn(&child_pid, "ls", NULL, NULL, argv, NULL);
if (ret != 0){
cout << "posix_spawn is error" << endl;
exit(-1);
}
wait(&wait_val);
cout << "This is main process and the wait value is " << wait_val << endl;
exit(0);
}
例項二:
/*************************************************************************
> File Name: useposix_spawn2.cpp
> Author:
> Mail:
> Created Time: 2015年12月14日 星期一 14時21分52秒
************************************************************************/
#include <iostream>
#include <spawn.h>
#include <string.h>
#include <sys/wait.h>
#include <cstdlib>
#include <error.h>
using namespace std;
/*
#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]);
*/
int main(int argc, char *argv[])
{
pid_t child_pid[2];
int ret;
int wait_val[2];
cout << "This is main process......" << endl;
ret = posix_spawn(&child_pid[0], "ls", NULL, NULL, argv, NULL);
if (ret != 0){
cout << "posix_spawn is error" << endl;
exit(-1);
}
ret = posix_spawn(&child_pid[1], "cat", NULL, NULL, argv, NULL);
if (ret != 0){
cout << "posix_spawn is error" << endl;
exit(-1);
}
wait(&wait_val[0]);
cout << "This is main process and the wait value of ls is " << wait_val[0] << endl;
wait(&wait_val[1]);
cout << "This is main process and the wait value of cat is " << wait_val[1] << endl;
exit(0);
}
相關文章
- 多程式函式系列fork(), wait(), exec()系列,system(), posix_spawn()例項詳解函式AI
- hasOwnProperty()函式程式碼例項函式
- js給函式設定預設值程式碼例項JS函式
- C#多執行緒程式設計例項C#執行緒程式設計
- jQuery css()函式使用程式碼例項jQueryCSS函式
- js冪函式程式碼例項分享JS函式
- 函式程式設計函式程式設計
- Jmeter beanshell程式設計例項JMeterBean程式設計
- 設計模式例項程式碼設計模式
- KafKa Java程式設計例項KafkaJava程式設計
- js confirm()函式用法程式碼例項JS函式
- jquery的filter()函式用法程式碼例項jQueryFilter函式
- javascript函式節流程式碼例項分享JavaScript函式
- 原生ajax()函式封裝程式碼例項函式封裝
- js函式作為函式的引數程式碼例項JS函式
- 演化計算(例項:多峰函式最值) (轉)函式
- scala 函式程式設計函式程式設計
- 函式程式設計之道函式程式設計
- Shell程式設計入門例項程式設計
- Qt 中Socket程式設計例項QT程式設計
- android socket程式設計例項Android程式設計
- The MySQL C API程式設計例項MySqlAPI程式設計
- XML程式設計例項(二) (轉)XML程式設計
- Java&CORBA程式設計例項JavaORB程式設計
- corba程式設計簡單例項ORB程式設計單例
- Java XML程式設計例項解析JavaXML程式設計
- 遠端開發分散式C#程式設計例項分散式C#程式設計
- Spring程式設計式和宣告式事務例項講解Spring程式設計
- on()方法一次註冊多個事件處理函式程式碼例項事件函式
- 【趣解程式設計】函式程式設計函式
- Windows 程式設計常用函式Windows程式設計函式
- 函數語言程式設計-鏈式程式設計RAC函數程式設計
- javascript以函式方式提交表單程式碼例項JavaScript函式
- js模擬實現replaceAll()函式程式碼例項JS函式
- 13.程式程式設計進階:函式程式設計函式
- [C++]C++程式設計例項C++程式設計
- shell程式設計例項--實現累加程式設計
- 【Akka】Akka入門程式設計例項程式設計