在程序c中捕获shell脚本输出
我有一个调用 shell 脚本 (command.sh) 的 C 程序 (program.c)。 command.sh 返回一个输出(密码),我需要在我的program.c 中获取此输出。 使用 system(command);
,我无法获取输出。 C 有其他方法可以解决我的问题吗?
I have C program ( program.c ) that calls a shell script ( command.sh ).
command.sh returns an output (a password), i need to get this output in my program.c.
using system(command);
, i can't get hold of the output.
is there any other way in C to solve my problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
不是纯 C 语言。你需要 POSIX。具体来说是
popen
函数。规范有一个很好的例子,你可以直接复制 1:1
http://pubs.opengroup.org/onlinepubs/009604499/functions/popen.html
Not in pure C. You want POSIX. Specifically
popen
function.The specification has a nice example, that you can just copy 1:1
http://pubs.opengroup.org/onlinepubs/009604499/functions/popen.html
听起来你害怕使用图书馆。请尝试使用库,它们与 shell 工具一样是 Unix 的一部分。
Sounds like you're afraid to use libraries. Please try and use libraries, they're just as much part of Unix as shell tools.
在纯 C 中(嗯……忽略
system()
调用的内容),您可以将 shell 脚本输出重定向到一个文件,然后读取该文件。In pure C (well ... ignoring the contents of the
system()
call) you can redirect the shell script output to a file, then read that file.您可以按照上面的建议使用
popen()
,但请注意,在这种情况下您无法控制您创建的进程(例如您将无法杀死它),您也不会知道它的进程退出状态。我建议使用经典的管道/分叉/执行组合。然后你就会知道你的子进程的pid,这样你就可以发送信号,同时使用
pipe()
你可以重定向进程标准输出,这样你就可以轻松地在你的父进程中读取它过程。例如,您可以看到我对popen()替代方案接受的答案。You can use
popen()
as suggested above, but note that in this case you have no control over the process you created (e.g. you will not be able to kill it), you also will not know its exit status.I suggest using classical pipe/fork/exec combination. Then you will know the pid of your child process, so you will be able so send signals, also with
pipe()
you are able to redirect process standard output, so you can easily read it in your parent process. As example you can see my accepted answer to popen() alternative.您应该使用
popen
打开管道,但这听起来很乏味。 C 程序调用 shell 脚本来获取密码。You should open a pipe using
popen
but this sounds tedious. A C program calling a shell script for a password.