我有一個bash腳本,它打印一個巨大的變量輸出行。 我見過的所有示例都使用1024字節左右的固定緩衝區,以便逐行閱讀。我怎樣才能分配一個可變長度的命令輸出?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
FILE *fp;
char path[1024];
/* Open the command for reading. */
fp = popen("bash /home/ouhma/myscript.sh", "r");
if (fp == NULL) {
printf("Failed to run command\n");
exit(1);
}
/* Read the output a line at a time - output it. */
while (fgets(path, sizeof(path)-1, fp) != NULL) {
printf("%s", path);
}
/* close */
pclose(fp);
return 0;
}
鏈接參考:C: Run a System Command and Get Output?
但是,如果我不知道是什麼,如果輸出線的長度更大的1024個字節? 如何通過使用popen()
命令閱讀來處理它?
你可以使用POSIX ['getline()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html)來閱讀儘可能長的一行,但只限於內存限制,或者你可以當你還沒有收到換行符時,反覆調用fgets(),添加一個你根據需要動態分配的緩衝區。這兩者都不是很複雜,儘管使用getline()比使用getline()更容易。 –
請注意,如果一行超過1024行,您當前的代碼將繼續在下一個fgets()調用中讀取該行的其餘部分。因此,只需打印出文本的當前代碼就可以毫無問題地工作。 (然而,如果你想在你的程序中存儲一整行並且在一段時間內操作該行 - 你需要看看alk的答案) – nos