免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2334 | 回复: 7
打印 上一主题 下一主题

关于while中循环执行popen的问题 请各位高手帮忙指教我的程序哪里出现了问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-15 09:41 |只看该作者 |倒序浏览
#include "stdio.h"
#include "stdlib.h"
#include "errno.h"
#include "string.h"
#include "netdb.h"
#include "sys/types.h"
#include "netinet/in.h"
#include "sys/socket.h"

#define SVRPORT 5656

main(){
int sock_fd,rcvnum;
char sSBuf[150],sRBuf[150];

FILE *fp;

struct sockaddr_in serv_addr;

while (1){
        memset(&sSBuf,0,sizeof(sSBuf));
        memset(&sRBuf,0,sizeof(sRBuf));


        /* ============================
        =         获得系统状态        =
        ============================ */

        if((fp = popen("/bin/sgetsys","r") == NULL){
                printf("popen error !!!!!\n";
                pclose(fp);
                exit(1);
        }



        if((fgets(sSBuf,150,fp)) == NULL){
                printf("sgetsys fail !!!!!\n";
                exit(1);        
        }


        if ( pclose(fp) == -1){
                printf("pclose error !!!!!\n";
                exit(1);
        }

        /* ============================
        =        socket 传送数据      =
        ============================ */
        if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
                perror("create socket error !!!!!";
                exit(1);        
        }

        serv_addr.sin_family = AF_INET;
        serv_addr.sin_port = htons(SVRPORT);
        serv_addr.sin_addr.s_addr = inet_addr("10.1.2.17";
        bzero(&(serv_addr.sin_zero),;

        if( connect(sock_fd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1){
                perror("connect error !!!!!";
                exit(1);        
        }


        if( send(sock_fd, sSBuf, strlen(sSBuf), 0) == -1){
                perror("send error !!!!!";
                exit(1);        
        }

        close(sock_fd);
}

}





####################################################################
其中 sgetsys 为
sgetsys
#生成文件格式为:
# cpu1空闲|cpu2空闲|用户数|%busy|%usr|%sys|%wio|%idle

#echo `date '+%H:%M:%S'`
stat=`sar 1 1|tail -1|awk '{print $2"|"$3"|"$4"|"$5}'`
#stat=`sar -d 1 1|tail -1|awk '{print $3}'`"|"$stat
stat=`who | wc -l | sed "s/ //g"`"|"$stat
stat=`ps -ef -o comm -o pcpu|sort -k 2|grep CPU2|awk '{print $3}'`"|"$stat
stat=`ps -ef -o comm -o pcpu|sort -k 2|grep CPU1|awk '{print $3}'`"|"$stat
echo $stat
#echo `date '+%H:%M:%S'`

论坛徽章:
0
2 [报告]
发表于 2007-05-15 10:29 |只看该作者
我的程序长时间运行会报如下错误:
waring:table-grow-proc table page limit of 1304 pages (MAX-PROC) exceed by 1 pages
newproc-pocess table overflow (MAX-PROC = 15514 exceeded)
是因为 产生僵死进程了么

论坛徽章:
0
3 [报告]
发表于 2007-05-15 10:36 |只看该作者

关注中

运行时看看进程信息吧!
是否有异常

论坛徽章:
0
4 [报告]
发表于 2007-05-15 11:03 |只看该作者
popen每次执行shell的ID号都在上次ID号的基础上不断增加,应该怎样解决?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2007-05-15 11:28 |只看该作者
原帖由 hnthjh 于 2007-5-15 11:03 发表
popen每次执行shell的ID号都在上次ID号的基础上不断增加,应该怎样解决?

这个没法解决。

论坛徽章:
0
6 [报告]
发表于 2007-05-15 11:55 |只看该作者
是否有什么其他方法可以实现我的功能,我想不断的取主机系统状态数据,然后将数据发送给服务端

[ 本帖最后由 hnthjh 于 2007-5-15 11:57 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2007-05-15 12:16 |只看该作者
原帖由 hnthjh 于 2007-5-15 09:41 发表
#include "stdio.h"
#include "stdlib.h"
#include "errno.h"
#include "string.h"
#include "netdb.h"
#include "sys/types.h"
#include &q ...

这种包含头文件的方式还真少见

论坛徽章:
0
8 [报告]
发表于 2007-05-15 13:45 |只看该作者
你不用每次都新建fd和socke_fd,建立一次,然后循环读取发送不就行了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP