当前位置:  技术问答>linux和unix

程序有点长,想请达人帮忙耐心看看......

    来源: 互联网  发布时间:2016-06-08

    本文导语:  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include "test_que.h"  //队列的头文件,里面定义了对队列的操作 #include  #include  #define num_threads 10 static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; int ...

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "test_que.h"  //队列的头文件,里面定义了对队列的操作
#include 
#include 

#define num_threads 10

static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int numprinted = 0;
queueLK q;  //定义了一个队列


void
snmp_get_and_print(netsnmp_session * ss, oid * theoid, size_t theoid_len)
{
    netsnmp_pdu    *pdu, *response;
    netsnmp_variable_list *vars;
    int             status;

    pdu = snmp_pdu_create(SNMP_MSG_GET);
    snmp_add_null_var(pdu, theoid, theoid_len);

    status = snmp_synch_response(ss, pdu, &response);
    if (status == STAT_SUCCESS && response->errstat == SNMP_ERR_NOERROR) {
        for (vars = response->variables; vars; vars = vars->next_variable) {
            numprinted++;
            print_variable(vars->name, vars->name_length, vars);
        }
    }
    if (response) {
        snmp_free_pdu(response);
    }
}

void
parse_oid(char objoid[])
{
netsnmp_session  session, *ss;
netsnmp_pdu  *pdu,*response;
netsnmp_variable_list  *vars;
oid  name[MAX_OID_LEN];
size_t name_length;
oid root[MAX_OID_LEN];
size_t rootlen;
int running;
int status;
int count;
int exitval = 0;

//建立起snmp连接,一些必要的初始化措施
init_snmp("walkpro");

snmp_sess_init( &session );
session.peername = strdup("192.168.10.194");


session.version = SNMP_VERSION_2c;

session.securityName = strdup("motorola");
session.securityNameLen = strlen(session.securityName);

session.community = "public";
session.community_len = strlen(session.community);

session.securityLevel = SNMP_SEC_LEVEL_AUTHNOPRIV;

session.securityAuthProto = usmHMACMD5AuthProtocol;
session.securityAuthProtoLen = sizeof(usmHMACMD5AuthProtocol)/sizeof(oid);

session.securityAuthKeyLen = USM_AUTH_KU_LEN;


//分析oid节点,将信息存储在root中
rootlen = MAX_OID_LEN;
if (snmp_parse_oid (objoid, root, &rootlen) == NULL) {
snmp_perror(objoid);
exit(1);
}

//打开之前已经初始化好的连接
SOCK_STARTUP;
ss = snmp_open(&session);
if(ss == NULL){
snmp_sess_perror("walkpro",&session);
SOCK_CLEANUP;
exit(1);
}

memmove(name,root,rootlen * sizeof(oid));
name_length = rootlen;

//建立一个get_next的pdu,封装好pdu后进行发送,并对收到的回复pdu(response)进行分析
running = 1;
while (running) {
pdu = snmp_pdu_create(SNMP_MSG_GETNEXT);
snmp_add_null_var(pdu, name, name_length);

        status = snmp_synch_response(ss, pdu, &response);
    if (status == STAT_SUCCESS) {
    if (response->errstat == SNMP_ERR_NOERROR) {
    for (vars = response->variables; vars;                    
     vars = vars->next_variable) {
if ((vars->name_length name, rootlen * sizeof(oid))
!= 0)) { 
running = 0;//not part of this subtree
continue;
}

numprinted++;
print_variable(vars->name, vars->name_length, vars);
if ((vars->type != SNMP_ENDOFMIBVIEW) &&
(vars->type != SNMP_NOSUCHOBJECT) &&
(vars->type != SNMP_NOSUCHINSTANCE)) {
                        
memmove((char *) name, (char *) vars->name,
    vars->name_length * sizeof(oid));
    name_length = vars->name_length;
} else
      running = 0;
    }
    } else {
    running = 0;
if (response->errstat == SNMP_ERR_NOSUCHNAME) {
    printf("End of MIBn");
} else {
    fprintf(stderr, "Error in packet.nReason: %sn",
        snmp_errstring(response->errstat));
if (response->errindex != 0) {
fprintf(stderr, "Failed object: ");
 for (count = 1, vars = response->variables;
     vars && count != response->errindex;
 vars = vars->next_variable, count++)
    if (vars)
    fprint_objid(stderr, vars->name,
             vars->name_length);
    fprintf(stderr, "n");
    }
exitval = 2;
    }
}
    } else if (status == STAT_TIMEOUT) {
    fprintf(stderr, "Timeout: No Response from %sn",
        session.peername);
    running = 0;
exitval = 1;
} else {                
    snmp_sess_perror("walkpro", ss);
running = 0;
exitval = 1;
    }
    if (response)
    snmp_free_pdu(response);
    }
if (numprinted == 0 && status == STAT_SUCCESS) {
snmp_get_and_print(ss, root, rootlen);
}

    snmp_close(ss);
    SOCK_CLEANUP;
}

void *
get_oid()                       //获取oid,只要队列不空,线程就从队列中取数据直到为空
{
char *ptr,*oid;
int len;
int i = 0;
pthread_mutex_lock(&mutex);
while(!emptyQueue(&q)){
ptr = outQueue(&q);                 //outQueue()的功能是删除一个节点,并将该节点的值返回
len = strlen(ptr);
oid = malloc(len * sizeof(char) + 1);
strncpy(oid,ptr,len);
i++;
printf("%d:oid = %sn",i,oid);
// parse_oid(oid);
}
pthread_mutex_unlock(&mutex);
free(oid);
return NULL;
}
/************************************************************************/

int 
main(int argc, char* argv[])
{
int fd;
struct stat st;
char *ptr_fd;
char *ptr_oid;
char *out_ptr = NULL;
int i,j;
FILE *fp;
pthread_t *tid;

fd = open("test.txt",O_RDONLY);
fstat(fd,&st);
ptr_fd = mmap(NULL,st.st_size,PROT_READ | PROT_WRITE,MAP_PRIVATE,fd,0);  //为文件建立内存映射

if(ptr_fd == MAP_FAILED){
printf("mmap failed!n");
return 0;
}

//初始化队列,并且从内存映射中,一次返回一行,建立队列
initQueue(&q);
ptr_oid = strtok_r(ptr_fd,"n",&out_ptr);
if(enQueue(&q,ptr_oid) != 0)
printf("队列初始化错误!n");
while(ptr_oid = strtok_r(NULL,"n",&out_ptr)){
if(enQueue(&q,ptr_oid) != 0)
printf("队列初始化错误!n");
}

//创建10个线程
tid = malloc(num_threads * sizeof(pthread_t));
for(i = 0; i 

    
 
 

您可能感兴趣的文章:

  • 请教达人:如何不改内核在linux的应用程序层实现键盘拦截功能。
  • 串口不能发数据 收正常 达人帮忙看看程序
  • 是什么导致程序编译错误?望达人指教
  • 小弟在学习LINUX程序设计时遇到有关wait和waitpid的问题,请各位达人帮忙,不胜感激。
  • 求达人救命.....[程序有些长,请您耐心帮忙看看]
  • 用jbuilder开发的程序,其中用到了xylayout,将应用程序做成了jar文件,运行jar文件时,提示错误。请大家多帮忙
  • 帮忙写一个小程序readkey
  • jni 中一个简单程序,请大家帮忙!
  • 关于程序移植,请知道的帮忙,分会加的
  • 用JAVA编一个程序,测试网络速度~~高手帮忙
  • 高手帮忙,pkg安装包结束后,如何启动GUI程序?
  • 100分请帮忙,我不能编译servlet程序
  • 编写把一java程序中所有的print语句都删除,帮忙分析一下思路。
  • 想做个程序,帮忙提个纲吧,哥们!!!!
  • 不能运行编译出来的程序,请大家帮忙看看
  • 帮忙写一段程序(LINUX文件管理)
  • 请高手帮忙写个测试程序?
  • 请大家帮忙看个小程序
  • 各位谁能帮忙看一下这个程序?谢谢!!
  • 帮忙看一下这个程序在LINUX下好不好用,谢谢!
  • 关于telnetd程序移植的问题,请了解Unix telnet过程的大侠帮忙看看
  • 怎样用java作一个屏幕保护程序?请帮忙
  • unix系统中执行程序status=139是什么问题啊?请帮忙讲讲status啊!!!
  • 很简单的java程序,求大家帮忙,赚分的好机会!
  • !!!快来帮忙!!!在程序中如何获取当前的系统时间(精确到毫秒ms)???
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • JSP程序出错,请给看看,谢了-----resin服务器
  • 看看程序错在那里?
  • 哪位大侠帮我看看这个程序。
  • 想找些鼠标和键盘的驱动源程序看看,去哪找啊?
  • 帮我看看这道程序题目
  • 请帮我看看下面的程序
  • 哪位大哥知道如何将rtf文件转化成html文件,请赐教,最好给个程序看看!多谢,多谢,120分奉上!!!
  • 我想找一些纯OO的jsp完整程序看看
  • 看看这个程序
  • 我要下载LINUX安装程序,不知道该下那个,大家看看
  • 谁能帮我看看这段程序,拜托了
  • 那位大侠给我一个线程池的例子程序看看
  • 看看这两个小程序
  • (在线等)关于主程序和线程的执行顺序。。。大家帮我看看
  • 高手们帮我看看这段程序??
  • 深圳的程序员朋友请进来看看!下周一结分
  • 小弟初入java这一行,很想看看已经编好的源程序,愿意指教的请发送到samgundam@sina.com!谢谢
  • 看看这个小程序错误在哪里,多谢了!!
  • 我在hp-ux 里用gcc编译程序,但报了下面的错,各位看看是什么问题
  • 大家来帮我看看这个程序吧!!!!
  • 重装服务器后IIS网站错误(应用程序中的服务器错误)
  • 为什么我在java程序里启动的一个程序在java程序关闭后,该程序的所有进程都关掉了
  • windows server2008上PowerBuilder程序系统错误解决方法
  • Linux 编程怎么样在程序开启一个程序,和关闭一个程序?
  • c语言判断某一年是否为闰年的各种实现程序代码
  • 请问从一个java程序中如何调用另一java程序,并控制可以其状态(最小化、最大化、结束程序),还有怎样知道那个被调用的程序结束。
  • 程序员的八种级别,你属于哪一级?
  • Linux下的程序是在内存中运行的吗?为什么在程序运行的时候可以删除程序文件?
  • 网络技术 iis7站长之家
  • 我的程序是用c写的gtk+程序,有个函数的参数要传给它图片的文件名,但是图片和原程序不在同一目录下怎么办?怎么在程序里指定文件的路径
  • 在docker容器中通过apt-get安装新的程序


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3