3
我在C語言中執行shell命令時遇到了問題。我想在C中執行shell命令,然後捕獲shell命令的輸出並進一步處理輸出。我使用下面的代碼來執行功能。但是,問題是當shell命令不會返回任何輸出時,fgets()會返回垃圾信息?例如,如果/ etc/version包含','分隔值,shell返回輸出,fgets返回shell命令返回的值,但是當/ etc/version不包含','時,分離的值,shell不返回任何值,fgets返回垃圾信息。有沒有解決這個問題的方法,或者是否有任何其他解決方案在C和capture shell命令輸出中執行shell命令?如何在C中執行shell命令?
char return_val[256];
FILE *fp = NULL;
char line[256];
memset (return_val, 0, 256);
/* set the defalut value */
strncpy (return_val, "N/A", 4);
char cmd[] = "if [ -f /etc/umts2100_version ]; then cut -d, -f1 -s /etc/umts2100_version ; fi";
/* Open the command for reading. */
fp = popen(cmd, "r");
if (fp != NULL)
{
/* read the line from file */
fgets (line, 256, fp);
if(line != NULL)
{
/* copy the data */
strncpy(return_val, line, strnlen (line, 256));
}
/* close the file */
pclose (fp);
}
嗨,我試着你有什麼建議。建議解決方案的問題是,如果流的字節數小於255(考慮它只有2個字節),則fgets返回NULL,但將2個字節的內容複製到行中。如果我錯了,請糾正我。 – Ravi 2011-05-12 12:54:48
@Ravi這兩個字節是一行嗎?換句話說,他們最終是否有\ n?如果不是,你可能不得不用fread或fgetc而不是fgets來讀取流。 – 2011-05-12 13:27:33
感謝您的回覆。在線的末尾我不認爲\ n存在。 fp到達文件結尾,這就是原因,fgets()返回NULL。我認爲fgetc()是更好的選擇。 – Ravi 2011-05-13 06:37:16