将popen()的输入读入C中的char *

时间:2014-11-14 14:50:31

标签: c char popen

我有一个包含来自popen()的输入的FILE指针。我想将所有输入放入char * str,但我不知道如何做到这一点(C编程新手)。

void save_cmd(int fd) {
  char buf[100];
  char *str;
  FILE *ls;
  if (NULL == (ls = popen("ls", "r"))) {
    perror("popen");
    exit(EXIT_FAILURE);
  }

  while (fgets(buf, sizeof(buf), ls) != NULL) {
    //Don't know what to do here....
  }
  pclose(ls);
}

我想我不得不在while循环中连接,但是如果我事先不知道总大小(我想将整个结果保存在char * str中),这怎么可能呢?如果有人有关于如何做到这一点的指示,我将非常感激。

1 个答案:

答案 0 :(得分:3)

因此,在您的代码中,您已在buf

中捕获了一行

现在你想要在* str变量中正确使用它。

你需要为它分配内存然后复制。这是一个例子:

void save_cmd(int fd) {
  char buf[100];
  char *str = NULL;
  char *temp = NULL;
  unsigned int size = 1;  // start with size of 1 to make room for null terminator
  unsigned int strlength;

  FILE *ls;
  if (NULL == (ls = popen("ls", "r"))) {
    perror("popen");
    exit(EXIT_FAILURE);
  }

  while (fgets(buf, sizeof(buf), ls) != NULL) {
    strlength = strlen(buf);
    temp = realloc(str, size + strlength);  // allocate room for the buf that gets appended
    if (temp == NULL) {
      // allocation error
    } else {
      str = temp;
    }
    strcpy(str + size - 1, buf);     // append buffer to str
    size += strlength; 
  }
  pclose(ls);
}