1. 程式人生 > >Linux下使用c++呼叫shell命令

Linux下使用c++呼叫shell命令

1:system()

宣告:

extern int system (const char *__command) __wur;
函式說明:首先會呼叫fork()產生子程序,由子程序執行具體的命令,呼叫system期間,SIGG
HID訊號會被擱置,但是SIGINT和SIGQUIT則會被忽略。
對於返回值,如果system()在呼叫/bin/sh時失敗則返回127,其他失敗原因返回-

2:popen
extern FILE *popen (const char *__command, const char *__modes) __wur;

popen()也會呼叫fork()產生子程序,然後從子程序中呼叫/bin/sh -c
來執行引數command的指令。引數type可使用“r”代表讀取,“w”
代表寫入。依照此type值,popen()會建立管道連到子程序的標準輸
出裝置或標準輸入裝置,然後返回一個檔案指標。隨後程序便可利
用此檔案指標來讀取子程序的輸出裝置或是寫入到子程序的標準輸
入裝置中。此外,所有使用檔案指標(FILE*)操作的函式也都可以使
用,除了fclose()以外。
3、使用vfork()新建子程序,然後呼叫exec函式族
先介紹一下vfork函式,與fork函式的區別:

fork與vfork的區別
1. fork要拷貝父程序的資料段;而vfork則不需要完全拷貝父程序的資料段,在子程序沒有呼叫exec和exit之前,子程序與父程序共享資料段
2. fork不對父子程序的執行次序進行任何限制;而在vfork呼叫中,子程序先執行,父程序掛起,直到子程序呼叫了exec或exit之後,父子程序的執行次序才不再有限制。

結束子程序不用exit(0),而使用_exit(0)。這是因為_exit(0)在結束程序時,不對標準I/O流進行任何操作。而exit(0)則會關閉程序的所有標準I/O流。

#include<unistd.h>
main()
{
char * argv[ ]={“ls”,”-al”,”/etc/passwd”,(char*) };

if(vfork() = =0)
{
execv(“/bin/ls”,argv);
}else{
printf(“This is the parent process\n”);
}
}

4 使用exec函式群,這個比較繁瑣,建議移步csdn檢視

相關推薦

Linux使用c++呼叫shell命令

1:system() 宣告: extern int system (const char *__command) __wur; 函式說明:首先會呼叫fork()產生子程序,由子程序執行具體的命令,呼叫system期間,SIGG HID訊號會被擱置,但是SIGINT和SI

Linux 常用的Shell 命令

input int AR sel https 如果 del grep option 英文原文鏈接:https://www.lopezferrando.com/30-interesting-shell-commands/ 1. 監控命令(每2秒運行一次) watch

LinuxC++呼叫Java簡單例項(jni)

假設工作目錄為/home1. Java端1)  mkdir leixf && cd leixf2) 建立SubClass.java檔案,內容如下:package leixf;public class SubClass {private String name

Linuxc++呼叫自己編寫的matlab函式:通過mcc動態連結庫.so實現

之前在這裡和這裡呼叫了matlab自帶的一些函式,是通過matlab引擎來實現的。那裡呼叫的是matlab自帶的函式,那麼如果想呼叫自己寫的.m函式該怎麼辦呢?其實很簡單,原理類似,方法也不止一種。這篇筆記我先嚐試通過mcc將.m函式編譯成動態連結庫供c++呼叫的方式。在另

LinuxC程式動態庫的生成和呼叫

Linux下C程式動態庫的生成和呼叫 文章目錄 Linux下C程式動態庫的生成和呼叫 1 動態庫的打包和呼叫 2 靜態庫打包和呼叫 3 常用命令 4 gcc 和 g++ 區別 5 編譯和連結的理解

debian系列c++呼叫mysql, linux下面安裝mysql.h檔案

  1.介紹需求:   python呼叫資料庫,並做邏輯處理,時間為92.5s,從執行sql到得到資料150w條為22s,邏輯處理(2個for迴圈)為60s。前端處理30s,pending為2min左右,需要處理這個問題   於是思考解決方案:       1. 取資料時資料拆分  

Linux C 呼叫 ping命令 檢測網路狀態

int ping_status(char *ip) { int i, status; pid_t pid; printf(">>>>>>>>>>>>> ping_status\n "); // 不同則迴圈

LinuxJava呼叫C

概述 Java要想呼叫C的程式,就要把C生成的DLL檔案給Java呼叫,也就是要使用Java的本地化方法JNI呼叫C的DLL檔案。Java本地介面JNI(Java Native Interface),設計目的是與C/C++實現本地互動。 實現 1、在Java類中宣告nati

linux系統呼叫、API、系統命令,核心函式的區別與聯絡

1.系統呼叫: 應用程式和核心間的橋樑,是應用程式訪問核心的入口點;但通常情況下,應用程式通過作業系統提供的API進行程式設計而不是使用系統呼叫直接程式設計; linux的全部系統呼叫加起來大約只有250個左右。 2.API:   API常以c庫(libc)的形式提供,

linuxc++使用pthread_create時需要呼叫類成員

前幾天自己寫程式碼的時候,需要用到多執行緒的東西,但是由於需要執行的函式是一個類的成員,沒有辦法進行呼叫(將函式填入之後,編譯報錯。大致是引數格式不正確之類的提示),後來在網上查找了一些解決的辦法,做下記錄。 主要思路: 多執行緒可以直接呼叫靜態的函式,在通

linux如何在shell中結束程序(ctrl+c\ctrl+z\ctrl+d\ctrl+\的用法)

ctrl-c:傳送 SIGINT 訊號給前臺程序組中的所有程序。常用於終止正在執行的程式; ctrl-z:傳送 SIGTSTP訊號給前臺程序組中的所有程序,常用於掛起一個程序; ctrl-d:不是傳送

linuxpython呼叫C++動態庫以及庫函式

C++:首先C++需要編譯成動態共享庫C++程式碼(cpptest.cpp)如下------#include<iostream>using namespace std;extern "C"{//在extern “C”中的函式才能被外部呼叫int test(){  

Linux C/C++程式設計Shell命令大雜燴(1)

1, 檢視發行版資訊     cat /etc/issue 2, 檢視核心版本    uname -r 檢視核心版本    uname -p 檢視處理器型別32bit/64bit    uname -n 檢視網路主機名(or hostname) 3,OpenJDK和JD

Linux system函式返回值(linux C++呼叫shell詳解)

階段2:呼叫/bin/sh拉起shell指令碼,如果拉起失敗或者shell未正常執行結束(參見備註1),原因值被寫入到status的低8~15位元位中。system的man中只說明瞭會寫了127這個值,但實測發現還會寫126等值。

linuxjava呼叫c/c++庫

本文僅作為自己測試過程的一些記錄。由於在專案中想複用之前的c程式碼介面以減少java開發的工作量,因此做了最簡單的HelloWorld測試。java呼叫C/C++庫是使用JNI介面。具體過程記錄如下:1、在eclipse下建立一個名為nativeTest的java工程,在其中

Linux環境java呼叫ffmpeg命令進行視訊轉碼

1.這是在Linux系統下的程式碼,我執行後可以轉換成功: import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import

LinuxC程式命令列引數處理

       Linux下開發C程式,甚至是GUI程式,都可能需要處理複雜的命令列引數。健全、可靠的複雜命令列引數處理機制,可使程式方便使用,也更顯專業。Linux下幾乎所有的命令都提供了引數處理機制,包括短選項和長選項。  POSIX標準中對程式名、引數作了如下相關約定: 

linuxC C++呼叫C#

舊的MFC專案呼叫的一些庫用C#來寫(編譯成DLL庫),現在專案要移植到linux下,也想在linux下用C來呼叫C#,linux不支援C#,需要安裝linux下C#的執行環境mono。 呼叫原理大概是這樣子的,linux下的C/C++不能直接呼叫C#函式的,

Linuxc mysql程式的編譯命令

最好用 #gcc -o test test.c `mysql_config --cflags --libs` 其它的編譯命令: #gcc -o test test.c -I/usr/include/mysql -L/usr/lib/mysql

LinuxC結構體初始化

直觀 tro 擴展性 方式 建議 struct 初始化方式 www 寫到 原文地址在這裏: http://www.cnblogs.com/Anker/p/3545146.html 我 只把裏面的主要介紹和代碼寫到這裏了. 順序初始化   教科書上講C語言結構體初始化