c - 使用 C 与 Shell 交互

标签 c linux shell

我有一个名为 TEST 的二进制文件,它会生成一个 bash shell,我希望编写一个运行 TEST 的 C 程序,然后将命令传递给它生成的 bash shell - 我已经尝试过以下操作 - 有人可以指出这是否是可能的。我可以使用以下命令运行该文件,但不知道如何将命令传递给它生成的 shell:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main()
{
  system("/var/testfolder/TEST"); #run the test file
  return 0;
}

最佳答案

UNIX 风格 popen () 函数就是您要使用的函数。 有关详细信息,请参阅手册页。

它在子进程中运行您的命令,并为您提供一个与之交互的管道。它像 fopen() 一样返回一个 FILE 句柄,但您使用 pclose() 而不是 fclose() 关闭它。否则,您可以像处理文件流一样与管道进行交互。非常易于使用且有用。

这是一个link to a use case示例

另请查看此示例,该示例说明了执行您尝试执行的操作的方法:

#include <stdio.h>

int main(void) {
  FILE *in;
  extern FILE *popen();
  char buf[512];

  if (!(in = popen("ls -sail", "r")))
    exit(1);

  while (fgets(buf, sizeof(buf), in) != NULL)
    printf("%s", buf);

  pclose(in);
}

关于c - 使用 C 与 Shell 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29199343/

相关文章:

c - API用于检查有关CPU、内存、网络、NAT表使用情况的信息

c - 在 C 中为 char 数组赋值不起作用

sql-server - 如何在 Linux 中通过 Perl 脚本访问 SQL Server 数据库?

linux - 在 Linux 中共享套接字并从进程死亡中恢复?

c - 奇怪的错误(取消引用指向不完整类型的指针)

c - C 中的小写字符转换为大写字符并写入文件

regex - 如何使用 Regex 和 diff 实用程序 ("-I regex"选项忽略特定的文件行)?

bash - 判断用户当前tty是否运行图形界面

database - 使用 shell 脚本的 sqlplus 访问和电子邮件访问

linux - 不同行的 IF 语句