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

发布于 2024-12-20 04:51:24 字数 163 浏览 0 评论 0原文

我有一个调用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

站稳脚跟 2024-12-27 04:51:24

不是纯 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

薄凉少年不暖心 2024-12-27 04:51:24

听起来你害怕使用图书馆。请尝试使用库,它们与 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.

二智少女猫性小仙女 2024-12-27 04:51:24

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

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

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.

system("whatever > file");
handle = fopen("file", "r");
/* if ok use handle */
fclose(handle);
秋凉 2024-12-27 04:51:24

您可以按照上面的建议使用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.

孤千羽 2024-12-27 04:51:24

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

You should open a pipe using popen but this sounds tedious. A C program calling a shell script for a password.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文