1

我正在用 C 创建一个反向 shell(仅供练习),但我不知道如何从我的 C 程序执行终端命令。我该怎么做呢?(我在 POSIX 系统上)(我想得到输出)

4

1 回答 1

2

如何从我的 C 程序执行终端命令......(我想得到输出)

看看popen

例子

#include <stdio.h>

int main(int argc, char ** argv)
{
  if (argc != 2) {
    fprintf(stderr, "Usage: %s <command>\n", *argv);
    return -1;
  }

  FILE * fp = popen(argv[1], "r");

  if (fp != 0) {
    char s[64];

    while (fgets(s, sizeof(s), fp) != NULL)
      fputs(s, stdout);

    pclose(fp);
  }

  return 0;
}

编译和执行:

bruno@bruno-XPS-8300:/tmp$ gcc -Wall o.c
bruno@bruno-XPS-8300:/tmp$ ./a.out date
samedi 11 avril 2020, 17:58:45 (UTC+0200)
bruno@bruno-XPS-8300:/tmp$ a.out "date | wc"
      1       6      42
bruno@bruno-XPS-8300:/tmp$ ./a.out "cat o.c"
#include <stdio.h>

int main(int argc, char ** argv)
{
  if (argc != 2) {
    fprintf(stderr, "Usage: %s <command>\n", *argv);
    return -1;
  }

  FILE * fp = popen(argv[1], "r");

  if (fp != 0) {
    char s[64];

    while (fgets(s, sizeof(s), fp) != NULL)
      fputs(s, stdout);

    pclose(fp);
  }

  return 0;
}
bruno@bruno-XPS-8300:/tmp$ 
于 2020-04-11T15:59:22.057 回答