2 machelcheng machelcheng 于 2014.12.21 00:38 提问

popen调用后,从执行的shell命令结果中获取数据失败

#include
#include
#include
#include

#define CMD "cat /proc/diskstats| grep '\b[sh]d[a-z]\b'| awk '{print $4" "$6" "$8" "$10}'"
int main()
{
FILE *file=popen(CMD, "r");
char buff[255];
if(fgets(buff, 255, file)!=NULL)
printf("buff is %s\n", buff);
else
printf("fgets failed.\n");
pclose(file);
return 0;
}
单独执行这个shell命令是没问题的,但是popen调用之后就获取不到内容了,看了popen函数以“r”执行的结果是重定向到标准输出了,那么fgets时就应该是从标准输出里获取数据才对,获取不到是什么原因呢?

1个回答

wangyaninglm
wangyaninglm   Ds   Rxr 2015.01.01 12:32

你这个include的啥头文件啊?
http://blog.csdn.net/wangyaninglm/article/details/42303861
你看看这个行不?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
使用popen函数执行shell命令
pclose(关闭管道I/O) 相关函数 popen 表头文件 #include 定义函数 int pclose(FILE * stream); 函数说明 pclose()用来关闭由popen所建立的管道及文件指针。参数stream为先前由popen()所返回的文件指针。 返回值 返回子进程的结束状态。如果有错误则返回-1,错误原因存于errno中。 错误代码 ECHILD
使用popen()执行shell命令并获取内容
1.popen通过管道获取shell的输出结果,跟重定向(ls > /test.txt)类似。 root@Easy-link:~# cat /proc/uptime 67.23 19.08 char*get_uptime() { float hours; FILE *fp; static char buf[16]; fp = popen("cat /proc/uptim
执行shell命令并读取执行结果——popen()的用法
1、popen() #include void call(){ FILE* fp = popen("ls", "r"); char buffer[1024]; int bytes_read = fread(buffer, 1, sizeof(buffer), fp); pclose(fp); if(bytes_r
linux使用popen读取shell命令执行结果
popen函数详解 描述 popen() 函数 用 创建管道 的 方式 启动 一个 进程, 并调用 shell. 因为 管道 是被定义成 单向的, 所以 type 参数 只能 定义成 只读 或者 只写, 不能是 两者同时, 结果流 也相应的 是 只读 或者 只写.  command 参数 是 一个 字符串指针, 指向的 是 一个 以 null 结束符 结尾的字符串, 这个 字符串
使用system,popen等执行命令函数失败的情况
最近使用php来进行各种系统操作,省去登录服务器,在网页上进行各项caoz
C程序中如何获取shell命令执行结果和返回值
如果在C程序中调用了shell命令,那么往往希望得到输出结果以及命令执行的返回布尔值。在这里分为两步来处理: 1.使用 popen 与 pclose 来执行shell命令; 2.使用‘echo $?’来获取上一条指令执行状态,如果为0那么标识成功执行,否则标识执行出错;代码如下:#include <stdio.h> #include <stdlib.h> #include <string.h>
python执行系统命令后获取返回值的几种方式
执行系统命令,没有返回值 result = os.popen('ps aux') res = result.read() for line in res.splitlines(): print line 执行系统命令,可以获取执行系统命令的结果 p = subprocess.Popen('ps aux',sh
python os popen 获取system运行结果
content=os.popen('help').read()
Linux下调用系统终端命令popen()
最近需要大量的数据分析,但是需要执行一个GCC名令对所有文件生成中间文件,但是Makefile不会写,所以就只能直接调用Linux终端的命令了,所以使用到了popen()函数,但是执行的时候,每次都会执行一部分然后显示出错,什么原因?google后才发现这个函数的功能是fork子进程,但是每次我的没有close掉,估计子进程太多就炸掉了,加上之后完美运行。 简单说一下popen()函数
使用 subprocess.Popen 创建子进程
subprocess被用来替换一些老的模块和函数,如:os.system、os.spawn*、os.popen*、popen2.*、commands.*。可见,subprocess是被推荐使用的模块。下面是一个很简单的例子,创建一个新进程,执行app1.exe,传入相当的参数,并打印出进程的返回值: import subprocess    returnCode = s