2011-12-09 36 views
1

我有调用shell脚本(command.sh)的C程序(program.c)。 command.sh返回一个输出(密码),我需要在我的program.c中得到这个输出。 使用system(command);,我无法获得输出。 是否有任何其他方式在C来解决我的问题?在程序c中捕获shell脚本输出

+0

您是否需要使用'system()'(这个作业)? – pilcrow

+0

@pilcrow我寻找另一种方式,如果存在。 (这不是作业;)) – Aymanadou

+0

看到这个职位: http://stackoverflow.com/questions/646241/c-run-a-system-command-and-get-output/646254#646254 – Deqing

回答

1

您可以使用popen()按照以上建议,但请注意,在这种情况下,你必须对你所创建的过程(例如,你将无法杀死它)没有控制,你也不会知道它的退出状态。

我建议使用经典的pipe/fork/exec组合。然后你会知道你的子进程的PID,所以你将能够发送信号,也可以使用pipe()来重定向进程标准输出,这样你就可以在父进程中轻松读取它。作为例子,你可以看到我接受的答案popen() alternative

2

不是纯粹的C.你想要POSIX。具体为popen函数。

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

+0

我希望对于使用内存作为我的程序c和脚本shell之间的中间机制。我不会使用文件。谢谢 – Aymanadou

+1

@Aymanadou是的,这个解决方案使用PIPE,这只是一个缓冲区。 –

1

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

2

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

2

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

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