簡體   English   中英

由於在c中執行cmd命令而獲得打印的文本

[英]get the text printed due to executing cmd command in c

我有一個二進制文件,它打印結果而不是返回值,如果我使用cmd執行它,我得到打印的文本,我設法從C代碼執行它,但是似乎我無法獲得通常打印的文本,存儲在變量中,以后可以使用它做進一步的決策。 我沒有太多的C經驗,並且在Google上搜索了很多。 我遇到了使用clip的想法,但是我的cmd表示找不到clip命令。 任何幫助或想法,將不勝感激。

您可以使用<stdlib.h>system功能來運行所需的命令。 要獲取命令的輸出,可以像在此問題中一樣修改命令,以將命令的輸出保存到文件中。 然后,您可以使用<stdio.h>的文件I / O函數來處理命令輸出。

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM