我有调用shell脚本(command.sh)的C程序(program.c)。 command.sh返回一个输出(密码),我需要在我的program.c中得到这个输出。 使用system(command);
,我无法获得输出。 是否有任何其他方式在C来解决我的问题?在程序c中捕获shell脚本输出
回答
您可以使用popen()
按照以上建议,但请注意,在这种情况下,你必须对你所创建的过程(例如,你将无法杀死它)没有控制,你也不会知道它的退出状态。
我建议使用经典的pipe/fork/exec组合。然后你会知道你的子进程的PID,所以你将能够发送信号,也可以使用pipe()
来重定向进程标准输出,这样你就可以在父进程中轻松读取它。作为例子,你可以看到我接受的答案popen() alternative。
不是纯粹的C.你想要POSIX。具体为popen
函数。
规范有一个很好的例子,你可以复制1:1 http://pubs.opengroup.org/onlinepubs/009604499/functions/popen.html
我希望对于使用内存作为我的程序c和脚本shell之间的中间机制。我不会使用文件。谢谢 – Aymanadou
@Aymanadou是的,这个解决方案使用PIPE,这只是一个缓冲区。 –
你应该打开使用popen
管道,但是这听起来很乏味。一个C程序调用一个shell脚本的密码。
听起来像你害怕使用库。请尝试使用库,它们与shell工具一样,也是Unix的一部分。
在纯C(well ...忽略system()
调用的内容)中,可以将shell脚本输出重定向到一个文件,然后读取该文件。
system("whatever > file");
handle = fopen("file", "r");
/* if ok use handle */
fclose(handle);
- 1. 在shell脚本中捕获db2输出
- 2. 如何从cucumber/aruba捕获shell脚本程序输出?
- 3. 捕获远程命令在shell脚本内的变量输出
- 4. 输出不被捕获在shell脚本中
- 5. 在C++中捕获shell脚本退出状态
- 6. 在PowerShell脚本中捕获MSBuild.exe输出
- 7. 捕获Python脚本输出
- 8. 捕获一个shell脚本的输出是从另一个shell脚本
- 9. 在PHP中捕获ncurses shell输出
- 10. C# - 捕获Windows应用程序输出
- 11. 从Ruby文件运行Shell脚本并捕获输出
- 12. 如何捕获从Ruby调用的shell脚本的输出?
- 13. 无法从运行java程序的shell脚本获取输出
- 14. 在PHP中捕获Python脚本输出并避免双输出
- 15. 在Teradata BTEQ脚本中捕获存储过程输出
- 16. 捕获程序输出
- 17. 如何在shell脚本中捕获SQLPlus退出代码?
- 18. 在SHELL脚本上执行C程序
- 19. 在shell脚本中重定向输出
- 20. shell脚本在html + email中输出html
- 21. 在shell脚本中输出find命令
- 22. 如何在perl脚本中捕获shell脚本的退出代码?
- 23. Bash脚本捕获输出到终端
- 24. 运行脚本的Bash捕获输出
- 25. Shell脚本-directory compare-输出
- 26. Shell脚本输出奇怪
- 27. 如何在C++程序中捕获strace的输出
- 28. 试图在c#中捕获python程序的控制台输出#
- 29. 在Unix Shell脚本中排序输入
- 30. 将shell脚本的输出放入Java程序的变量中
您是否需要使用'system()'(这个作业)? – pilcrow
@pilcrow我寻找另一种方式,如果存在。 (这不是作业;)) – Aymanadou
看到这个职位: http://stackoverflow.com/questions/646241/c-run-a-system-command-and-get-output/646254#646254 – Deqing