在程序c中捕获shell脚本输出

时间:2011-12-09 13:18:22

标签: c shell

我有调用shell脚本(command.sh)的C程序(program.c)。 command.sh返回输出(密码),我需要在program.c中获取此输出。 使用system(command);,我无法掌握输出。 C有什么其他方法可以解决我的问题吗?

5 个答案:

答案 0 :(得分:2)

不是纯粹的C.你想要POSIX。特别是popen功能。

规范有一个很好的例子,你可以只复制1:1 http://pubs.opengroup.org/onlinepubs/009604499/functions/popen.html

答案 1 :(得分:2)

听起来你害怕使用图书馆。请尝试使用库,它们与Unix工具一样是Unix的一部分。

答案 2 :(得分:2)

在纯C中(嗯......忽略system()调用的内容),您可以将shell脚本输出重定向到文件,然后读取该文件。

system("whatever > file");
handle = fopen("file", "r");
/* if ok use handle */
fclose(handle);

答案 3 :(得分:1)

您应该使用popen打开管道,但这听起来很乏味。一个C程序调用shell脚本来输入密码。

答案 4 :(得分:1)

您可以按照上面的建议使用popen(),但请注意,在这种情况下,您无法控制您创建的进程(例如,您将无法将其杀死),您也无法知道其退出状态

我建议使用经典的pipe / fork / exec组合。然后,您将知道子进程的pid,因此您将能够发送信号,同时使用pipe()您可以重定向进程标准输出,以便您可以在父进程中轻松读取它。例如,您可以看到我对popen() alternative的接受答案。