linux 下如何编写c程序,获得命令行结果?

如题,比如在linux下的ifconfig,运行编写的c程序,如何获得结果,之后在终端printf输出结果?貌似是用管道重定向,不太懂,希望大神求解~~能给个程序的例子最好了,命令就拿ifconfig吧~~~谢谢啦


void executeShell(const char *shell){

FILE *stream; 

char buf[1024];

memset( buf, '\0', sizeof(buf) );//初始化buf,以免后面写如乱码到文件中

stream = popen( shell , "r" );   //将命令的输出 通过管道读取(“r”参数)到FILE* stream

fread( buf, sizeof(char), sizeof(buf), stream); //将刚刚FILE* stream的数据流读取到buf中

pclose( stream ); 

printf("%s \n",buf);//打印输出结果

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-23
ifconfig的默认输出就是终端输出,只有你不需要终端输出的时候才会使用重定向,一般的重定向是文件重定向,两个符号,>>(append模式0) , >(一般模式)。管道是 | 符号,和重定向不同。
第2个回答  2012-03-23
直接在C文件里调用system就可以了。
#include <stdio.h>
int main(int argc, char *argv[])
{
system("ifconfig");
return 0;
}
编译执行就能在终端中输出ifconfig命令的结果。
man system看看。

shell脚本才会用到重定向。
第3个回答  推荐于2016-09-22
你要获取什么,ifconfig命令是获取当前主机的IP地址等信息,可以直接在终端命令行输入,例如
akaedu@akaedu-desktop:~/jwy/baidu/str$ ifconfig
eth0 Link encap:以太网 硬件地址 00:1f:d0:c4:91:92
inet 地址:192.168.1.155 广播:192.168.1.255 掩码:255.255.255.0
inet6 地址: fe80::21f:d0ff:fec4:9192/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:37932 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:23506 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:49613893 (49.6 MB) 发送字节:2359948 (2.3 MB)
中断:26 基本地址:0x4000

lo Link encap:本地环回
inet 地址:127.0.0.1 掩码:255.0.0.0
inet6 地址: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 跃点数:1
接收数据包:116 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:116 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:9772 (9.7 KB) 发送字节:9772 (9.7 KB)追问

用c实现一个程序,运行这个程序输出ifconfig结果

追答

你要的函数功能实现起来有点麻烦,下面的链接代码可以实现部分显示,我运行过,最下面是运行截图,不知道是不是你要的代码,有500多行。
链接:http://hi.baidu.com/zengzhaonong/blog/item/30836c8d9329cb19b31bba8f.html

截图如下:

本回答被提问者采纳
相似回答