linux syslog编程

 

/.h

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <pthread.h>
#include <syslog.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
 
 typedef struct debug_syslog
{
 int type;
 int enable;
 int enable_trace;

 int priority;
 char location[256];
 int fd;
 int seqno;   
 pthread_mutex_t mutex;
}__attribute__ ((packed));

 

.c

 

#include "send_syslog.h"

 

struct debug_syslog s_debug_syslog[2];

 

int main()
{
  pthread_mutexattr_t ma;  定义互斥锁属性变量
  pthread_mutexattr_init(&ma);
  pthread_mutexattr_settype(&ma, PTHREAD_MUTEX_RECURSIVE_NP);/*设置类型互斥锁的属性*/
              /*PTHREAD_MUTEX_RECURSIVE_NP:
              递归型,如果遇到我们上面所提到的死锁情况,
              同一线程循环给互斥量上锁,
              那么系统将会知道该上锁行为来自同一线程,
              那么就会同意线程给该互斥量上锁。*/
  pthread_mutex_init(&(s_debug_syslog[0].mutex), &ma);动态初始化互斥锁
  pthread_mutex_init(&(s_debug_syslog[1].mutex), &ma);动态初始化互斥锁
  pthread_mutexattr_destroy(&ma);
  
  
  pthread_mutex_lock(&(s_debug_syslog[0].mutex));
  s_debug_syslog[0].enable = 1;
  s_debug_syslog[0].enable_trace = 1;
  s_debug_syslog[0].type = 0;
  strncpy(s_debug_syslog[0].location, "/youqicode/mylog.txt", 200);
  pthread_mutex_unlock(&(s_debug_syslog[0].mutex)); 

  pthread_mutex_lock(&(s_debug_syslog[1].mutex));
  s_debug_syslog[1].enable = 1;
  s_debug_syslog[1].enable_trace = 1;
  s_debug_syslog[1].type = 0;
  strncpy(s_debug_syslog[1].location, "192.168.3.79", 200);
  pthread_mutex_unlock(&(s_debug_syslog[1].mutex));
  
  pthread_mutex_lock(&(s_debug_syslog[0].mutex));
  s_debug_syslog[0].fd = open(&(s_debug_syslog[0].location), O_WRONLY|O_APPEND, 0666);
  
  if (s_debug_syslog[0].fd == -1 )
  {
    syslog(LOG_DAEMON | LOG_WARNING, "Can not create file!/n");
    printf("Open file failed !/n");
  }
  else
  {
    printf("Open file successfully !/n");
  }  
  int write_length1 = write(s_debug_syslog[0].fd, "hello syslog !/n", strlen("hello syslog !/n"));  
  printf("write_length1 = %d/n", write_length1);
  close(s_debug_syslog[0].fd);
  pthread_mutex_unlock(&(s_debug_syslog[0].mutex));
  
  pthread_mutex_lock(&(s_debug_syslog[1].mutex));
  struct sockaddr_in addr;
  long s_addr = 0;
  memset (&addr, 0, sizeof(struct sockaddr_in));  
  s_debug_syslog[1].fd = socket(AF_INET,SOCK_DGRAM,0);
  if(s_debug_syslog[1].fd > 0)
  {
    addr.sin_family = AF_INET;
    s_addr = inet_addr(s_debug_syslog[1].location);
    if (s_addr == -1)
    {
      syslog(LOG_DAEMON | LOG_WARNING, "invalid ipaddress %s",s_debug_syslog[1].location);
      printf("invalid ipaddress !/n");
      close(s_debug_syslog[1].fd);
      s_debug_syslog[1].fd = -1;
    }
    else
    {
      addr.sin_addr.s_addr = s_addr;
      addr.sin_port = htons(514);
      if (connect(s_debug_syslog[1].fd,(struct sockaddr *)&addr,sizeof(addr)) < 0)
      {
        syslog(LOG_DAEMON | LOG_WARNING, "Can not connect to %s:%d for logging.",s_debug_syslog[1].location, 514);
        close(s_debug_syslog[1].fd);
        s_debug_syslog[1].fd = -1;
        printf("connect failed !/n");
      }
      else
      {
        printf("connect successfully !/n");
      }
    }
    
    int write_length2 = write(s_debug_syslog[0].fd, "hello syslog !/n", strlen("hello syslog !/n"));
    printf("write_length2 = %d/n", write_length2); 
    sleep(1); 
    
    write_length2 = write(s_debug_syslog[0].fd, "hello syslog !/n", strlen("hello syslog !/n"));
    printf("write_length2 = %d/n", write_length2);
    sleep(1);
    
    write_length2 = write(s_debug_syslog[0].fd, "hello syslog !/n", strlen("hello syslog !/n"));
    printf("write_length2 = %d/n", write_length2);
    sleep(1);
    
    write_length2 = write(s_debug_syslog[0].fd, "hello syslog !/n", strlen("hello syslog !/n"));
    printf("write_length2 = %d/n", write_length2);
    sleep(1);
    
    write_length2 = write(s_debug_syslog[0].fd, "hello syslog !/n", strlen("hello syslog !/n"));
    printf("write_length2 = %d/n", write_length2); 
    sleep(1);  
  }
  else
  {
    printf("socket failed !/n");
   }
  close(s_debug_syslog[1].fd);
  pthread_mutex_unlock(&(s_debug_syslog[1].mutex));
  
  printf("strerror(errno) = %d/n", strerror(errno));
  
  return 0;
}

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值