得到命令的输出管道,C为Linux [英] get command output in pipe, C for Linux

查看:399
本文介绍了得到命令的输出管道,C为Linux的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要运行Linux的CLI命令并从C得到它的标准输出的输出。

I need to run a Linux CLI command and get its stdout output from C.

我可以使用管道()调用exec(),和父母从管道读取之前创建一个管道,然后叉/ EXEC,重定向孩子的标准输出描述到管道。另外,我需要等上了孩子。

I can use pipe() to create a pipe, then fork/exec, redirecting child's stdout descriptor into the pipe before calling exec(), and reading from the pipe in parent. Plus I'll need to wait on the child.

有一个简单的电话做叉+重定向+ EXEC +等待,像系统()不叉+ EXEC +等待,只有系统()不执行重定向。

Is there a simple call to do fork + redirect + exec + wait, like system() does fork + exec + wait, only system() doesn't do the redirect.

还有的popen()完成,这并叉+重定向+ EXEC,但没有做等待,所以我不能退出状态。

There's popen(), which does fork + redirect + exec, but doesn't do wait, so I can't get exit status.

推荐答案

这是它?


NAME
       popen, pclose - process I/O

SYNOPSIS
       #include <stdio.h>  

       FILE *popen(const char *command, const char *type);

       int pclose(FILE *stream);

DESCRIPTION
       The  popen()  function opens a process by creating a pipe, forking, 
and invoking the shell.  Since a pipe is by definition unidirectional, the 
type argument may specify only reading or writing, not both; the resulting 
stream is correspondingly read-only or write-only.

       The command argument is a pointer to a null-terminated string 
containing a shell command line.  This command is passed to /bin/sh 
using the -c flag; interpretation, if any, is performed by the shell.  
The type argument is a pointer to a null-terminated string which must be 
either ‘r’ for reading or ‘w’ for writing.

       The  return  value  from popen() is a normal standard I/O stream in 
all respects save that it must be closed with pclose() rather than fclose().  
Writing to such a stream writes to the standard input of the command; the 
command’s standard output is the same as that of the process that called 
popen(), unless this is altered by the command itself.  Conversely, reading 
from a ‘‘popened’’ stream reads the command’s standard output, and the 
command’s standard input is the same as that of the process that called 
popen().

       Note that output popen() streams are fully buffered by default.

       The pclose() function waits for the associated process to terminate 
and returns the exit status of the command as returned by wait4().

这篇关于得到命令的输出管道,C为Linux的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆