标签归档:Unix

利用原始套接字(SOCK_RAW)对ip数据进行监听

这两天在linux服务器上利用原始套接字搞了一个数据包监听转发工具,其中的关键代码摘抄如下:

   …

  m_sockid=::socket(PF_PACKET, SOCK_RAW,0);
  if(m_sockid==INVALID_SOCKET)return false;

   struct sockaddr_ll sll;
  struct ifreq ifr;

继续阅读

发表在 服务器, 程序开发 | 标签为 , | 留下评论

利用文件锁机制实现服务器程序的自启动

通过本文你可以体会一下举一反三的含义,以及unix程序设计的简洁性理念。
不知你有没有读过《Unix高级编程》一书,每一章节都是基本知识,感觉不到任何高级之意。正如《C++Primer》一样,书名和内容好像很不相称。
其实正如中国的一句俗语:运用之妙存乎一心。
读的程序多了,编的代码也不少了,剩下的也就是慢慢品味其中的乐趣了。
下面就举一个文件锁(file lock)的用法,向来不喜欢大段的函数参数格式说明,如果你想详细了解文件锁,请查阅相关文档。
服 务器程序当然不会无缘无故就死掉,除了受到人为攻击的原因,多是程序bug所致,经过长时间(如果允许)测试修正,纠正了大量的bug,服务器程序已经很 稳定了。服务器程序还会崩溃吗?没有人敢说不会,实际就是这样。那好,程序发布的最后阶段就应该是实现服务程序的崩溃自启动。
原理很简单:服务器 程序开始运行时先锁定一个文件,程序正常情况不释放该锁,当程序因故崩溃时Unix系统将自动释放该锁。由此我们可以设计另一个单独的监听程序,它在主程 序锁定锁文件后去锁定同样的文件,那么根据文件锁的性质,此锁定要求将被系统阻塞,当主程序崩溃释放文件锁时,监听程序将获得文件锁,继续执行,在此加入 重新启动主程序的命令即可。
主程序的开始处
        …
 int fd;
 fd=open(lockfilename,O_WRONLY|O_CREAT,0600);
 flock(fd,LOCK_EX);//互斥锁
       …

继续阅读

发表在 服务器, 程序开发 | 标签为 , , , | 留下评论

自制Linux必读c源码

如果您的自制linux安装盘总是不能成功进行安装,阅读一下下面的c代码,相信肯定会成功,
“源码面前了无秘密”便是如此.此代码属于 Red Hat Linux anaconda 安装程序的关键代码.
//////////////////////////////////////////////////////////////////////////
/* * cdinstall.c – code to set up cdrom installs * * Erik Troan * Matt Wilson * Michael Fulbright * Jeremy Katz * * Copyright 继续阅读

发表在 服务器 | 标签为 , , | 2条评论

CTDP linux 程序员手册 C和C++编程 调试 Linux 程序

 

gdb 调试命令
可以通过查阅 gdb(1)的手册页了解更多的信息。下面列出部分命令:
  • file – 装入可执行文件.
  • kill – 中断被调试的程序.
  • list – 列出源程序段
  • next – 执行当前函数中的一行代码,并且步进到另一个函数体内

继续阅读

发表在 服务器 | 标签为 , , | 留下评论

CTDP linux 程序员手册 C和C++编程(11)Viewmod程序

 

大家可以通过这个例子体会linux的c编程。
#include
#include
#include
#include
#include
#include
#include
#include
继续阅读

发表在 服务器 | 标签为 , , | 留下评论

CTDP linux 程序员手册 C和C++编程(10)Linux mutex互斥和条件变量

 mutex是确保两个线程(包括父线程)不会在同一时刻操作同一内存的方法。由此逻辑可以完成两个线程之间的数据发送,父线程拥有一个数据结构的缓存和与它相关的读写计数器。子线程可以从缓存中获得数据和写数据。当子线程读数据的时候,它填充缓存,并且更新计数器。父线程可以监视缓存计数器的值,并报告数据是否准备好:是或否,还是错误。

继续阅读

发表在 服务器 | 标签为 , , | 留下评论