亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不想把命令結果導入臨時文件,然后讀文件...,請問該怎么辦?

不想把命令結果導入臨時文件,然后讀文件...,請問該怎么辦?

阿晨1998 2022-06-17 17:11:52
例如 find . -name "A.txt"這條命令,查找到a.txt后會輸出 “路徑/a.txt”。如果我在C++代碼中用system("find . -name "A.txt"")執行了該條命令,那么如何用某個自定義的字符串取到 “路徑/a.txt” 這段字符串呢?system("find . -name "A.txt"");string strFileName = ???
查看完整描述

2 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

在windows下面這個的確是需要用管道來實現的

VC6參考代碼:

#include <windows.h>

#include <stdio.h>

BOOL ExcudeCmd(char *szOutPutBuf,char *szCmdLine)

{

SECURITY_ATTRIBUTES sa; 

HANDLE hRead,hWrite;


sa.nLength = sizeof(SECURITY_ATTRIBUTES); 

sa.lpSecurityDescriptor = NULL; 

sa.bInheritHandle = TRUE; //輸出重定向

if (!CreatePipe(&hRead,&hWrite,&sa,0)) 

printf("創建匿名管道失敗");

return FALSE; 

STARTUPINFO si; 

PROCESS_INFORMATION pi; 

ZeroMemory(&si,sizeof(STARTUPINFO));

si.cb = sizeof(STARTUPINFO); 

si.hStdInput=hRead;

si.hStdError = GetStdHandle(STD_ERROR_HANDLE);            //把創建進程的標準錯誤輸出重定向到管道輸入 

si.hStdOutput = hWrite;           //把創建進程的標準輸出重定向到管道輸入 

si.wShowWindow = SW_HIDE;

si.dwFlags =STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; 

if (!CreateProcess(NULL, szCmdLine,NULL,NULL,TRUE,0,NULL,NULL,&si,&pi)) 

CloseHandle(hWrite); 

CloseHandle(hRead); 

printf("創建子進程失敗"); 

return FALSE; 

else

{

CloseHandle(pi.hProcess);

CloseHandle(pi.hThread);

}

DWORD bytesRead; 


if (!ReadFile(hRead,szOutPutBuf,1000,&bytesRead,NULL)) 

{

printf("讀數據失敗"); 

return FALSE;

}

CloseHandle(hRead); 

return TRUE;

}


int main()

{

char cmdline[]="cmd.exe /c echo 回顯的信息",buf[1000];

ZeroMemory(buf,100);

ExcudeCmd(buf,cmdline);

printf(buf);//buf就是你想要的東西

}

Linux下面就不清楚了



查看完整回答
反對 回復 2022-06-20
?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

您可以試下類似的代碼,popen 函數在 vc6 中對應的應該是 _popen ,pclose 為 _pclose

或者百度 “c++ 獲取 system 的輸出” 您可以得到很多類似的問題的解決方案。


#include <stdio.h>#include <string> void executeCMD(const char *cmd, char *result){    char buf_ps[1024];    char ps[1024]={0};    FILE *ptr;    strcpy(ps, cmd);    if((ptr=popen(ps, "r"))!=NULL)    {        while(fgets(buf_ps, 1024, ptr)!=NULL)        {           strcat(result, buf_ps);           if(strlen(result)>1024)               break;        }        pclose(ptr);        ptr = NULL;    }    else    {        printf("popen %s error\n", ps);    }} int main(){        char result[1024];        executeCMD("find . -name \"A.txt\"", result);        printf("%s", result );        return 0;}

 


查看完整回答
反對 回復 2022-06-20
  • 2 回答
  • 0 關注
  • 171 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號