[英]get the text printed due to executing cmd command in c
我有一個二進制文件,它打印結果而不是返回值,如果我使用cmd執行它,我得到打印的文本,我設法從C代碼執行它,但是似乎我無法獲得通常打印的文本,存儲在變量中,以后可以使用它做進一步的決策。 我沒有太多的C經驗,並且在Google上搜索了很多。 我遇到了使用clip的想法,但是我的cmd表示找不到clip命令。 任何幫助或想法,將不勝感激。
在Linux中,您可以執行命令替換並將其結果作為參數傳遞給程序,就像這樣
./your_program "$(/path/to/your/binary/file)"
假設你的主要是
int main(int argc,char* argv[]){
.
.
return 0;
}
訪問參數,例如argv[1]
等。
在這里, $(command)
進行替換,並將打印出來的值從二進制作為參數傳遞給pgm。 希望這可以幫助。
使用snprintf函數。 例如
snprintf(cmdbuff, BUFFER_LEN, "dmidecode --type 17 | grep -i Size | grep -o '\\<[0-9]*\\>' | paste -sd+ | bc");
cmdbuff是將存儲命令的字符數組,BUFFER_LEN是字符數組的大小
然后使用popen和fgets將命令的輸出放入某個緩沖區,如下所示
if((fd = popen(cmdbuff,"r")) != NULL)
{
fgets(buffer, BUFFER_LEN, fd);
sprintf(vnfc_configured_memory, "%s", buffer);
vnfc_configured_totalRAM = atof(vnfc_configured_memory);
}
在POSIX系統上使用的正確函數對是popen()
和pclose()
。 除非警告“此API無法在Windows運行時中執行的應用程序中使用此API”對您_pclose()
否則您可以使用Microsoft的_popen()
和_pclose()
。
您將像這樣或多或少地使用它。 由於問題未指定該名稱,因此我不得不發明您希望執行的命令的名稱。 我選擇./example.exe
作為名稱—我假設它不需要任何參數。
char cmd[] = "./example.exe";
FILE *fp = popen(cmd, "r");
if (fp != NULL)
{
char buffer[4096];
size_t nbytes;
while ((nbytes = fread(buffer, sizeof(buffer), sizeof(char), fp)) != 0)
{
…process nbytes of data…
…it is not a null-terminated string unless you add the null byte…
}
pclose(fp);
}
else
{
…report error for failure to execute command…
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.