一種在linux下啓動shell進程並取得控制檯輸出的方法

windows下通過如下方法可以實現啓動一個shell進程並等待進程結束取得進程返回值
//SHELLEXECUTEINFO ShExecInfo = {0};
nRetCode = ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess, INFINITE);
GetExitCodeProcess(ShExecInfo.hProcess, &dwRetCode);

linux下無論fork() execXXX() system() waitpid()都無法實現類似需求。
用如下方法可以實現類似需求,前提是被調進程需要在控制檯上輸出如下內容 "my exit code is XXX"
int pipe_execute(const char * cmdstring){
char buff[512];
FILE *fstream=NULL;
int ret = -1;
memset(buff,0,sizeof(buff)); 
if(NULL==(fstream=popen(cmdstring,"r")))     
{    
fprintf(stderr,"execute command [%s] failed: %s",cmdstring,strerror(errno));     
return -1;     
}
while (fgets(buff, sizeof(buff), fstream))
{
printf(">%s",buff);
int t = 0;
if (sscanf(buff, " my exitcode is %d", &t))
{
ret = t;
printf("|fetched result %d", ret);
}
}   
pclose(fstream);
return ret;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章