- 博客(95)
- 资源 (92)
- 收藏
- 关注
原创 关于python多线程编程中join()和setDaemon()的一点儿探究
#!/usr/bin/env pythonimport threadingimport timeclass MyThread(threading.Thread): def __init__(self, func, args, name=''): threading.Thread.__init__(self) self.name=name
2014-09-30 09:52:52 498
原创 动态地改变Python搜索路径
sys.path.insert(0, os.path.normpath(os.path.join(os.path.normpath(os.path.join(os.getcwd(),os.path.dirname(__file__))), './..')))
2014-09-23 19:09:30 2067
原创 《Unix环境高级编程》:单实例守护进程的实现
//《APUE》程序13-1:初始化一个守护进程//《APUE》程序13-2:保证只运行某个守护进程的一个副本//《APUE》程序14-5:在文件整体加锁#include #include #include #include #include #include #include #include #include #include #includ
2014-09-23 10:44:57 404
原创 文件锁 记录锁
下面介绍两种两种Linux下对文件加锁的两种方式一、文件锁思想:假设有一个文件A。创建一个加锁文件B,通过不同的进程互斥的访问此加锁文件B达到互斥的访问文件A的目的。源码如下
2014-09-23 10:40:56 455
原创 非阻塞socket的连接 connect
连接套接字,阻塞的套接字超时时间很长无法接受,而是用非阻塞套接字时使用的方案也有多种。后者是个比较好的方法方案1:不断重试,直到连接上或者超时:int connect_socket_timeout(int sockfd,char *dest_host, int port, int timeout){ struct sockaddr_in address; struct
2014-09-19 22:24:42 4997
原创 Linux的udp服务端、客户端例子
UDP编程的服务器端一般步骤是:1、创建一个socket,用函数socket();2、设置socket属性,用函数setsockopt();* 可选3、绑定IP地址、端口等信息到socket上,用函数bind();4、循环接收数据,用函数recvfrom();5、关闭网络连接;UDP编程的客户端一般步骤是:1、创建一个socket,用函数socket();2、设置socket属性,用函数set
2014-09-18 11:58:48 677
原创 ICMP报文
一。为什么需要ICMP?因为IP协议不提供可靠性且不能保证信息传递,因此发生问题时,通知发送人是很重要的。(IP协议是一种不可靠的协议,无法进行差错控制。但IP协议可以借助其他协议来实现这一功能,如ICMP)二。什么是ICMP? ICMP: Internet Control Message Protocol 即Internet消息控制协议。ICMP报文分为两种类型(1)ICMP差错报告
2014-09-18 11:41:24 5035
原创 非阻塞connect的实现
步骤1: 设置非阻塞,启动连接实现非阻塞 connect ,首先把 sockfd 设置成非阻塞的。这样调用 connect 可以立刻返回,根据返回值和 errno 处理三种情况:(1) 如果返回 0,表示 connect 成功。(2) 如果返回值小于 0, errno 为 EINPROGRESS, 表示连接 建立已经启动但是尚未完成。这是期望的结果,不是真正的错误。
2014-09-12 19:34:48 509
原创 tcpdump
tcpdump默认只抓取一个包的前68或96个字节,如果要查看更多内容,需要加"-s number"选项,下面是我最常用的选项:-i any : 监听所有接口,-n : 不解析主机名-nn : 不解析主机名和端口名
2014-09-11 19:57:39 336
原创 用C语言实现Ping程序功能 IBM**************8
PING协议是用来检验本地主机与远程主机是否连接,发送的是ICMP ECHO_REQUEST包。普通的套接字是基于TCP或者是UDP的,无法发送ICMP包,所以必须用原始套接字来实现。PING协议的客户端类型值为8,代码值为0,表示请求。而PING协议的响应端类型值为0,代码值也为0,表示应答. 以太网数据部分的最小值为46字节,而IP首部占20个字节,ICMP的首部占8个字节,所以PING的数据
2014-09-11 16:48:06 633
原创 用原始套接字编程实现linux中的 ping 命令 ************************
用原始套接字编程实现linux中的 ping 命令#include #include #include #include signal.h> #include #include #include #include #include #include #include #include #include #include
2014-09-11 16:04:12 780
原创 原始套接口的ping命令编程
原始套接口(SOCK_RAW)允许对较低层协议(如IP或ICMP)进行直接访问,常用于检验新的网络协议实现,也可用于测试新配置或安装的网络设备。创建一个原始套接口时,一般格式如下: SOCKET sockid=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);//ICMP协议SOCKET sockid=socket(AF_INET,SOCK_RAW,IPPRO
2014-09-11 15:57:14 492
原创 Python中处理JSON字符串
http://www.crifan.com/files/doc/docbook/json_tutorial/release/html/json_tutorial.html
2014-09-10 14:12:16 6133 1
原创 vim的quickfix模式
通常,我们在开发过程中,经常要写代码,编译,修改编译错误,这个过程会数十遍上百遍的重复。如果你是根据编译器输出的错误信息,打开出错的文件,找到出错的行,然后再开始修改,那效率未免太低下了。利用vim的quickfix模式,可以大大加快这一过程,你可以在vim启动编译,然后vim会根据编译器输出的错误信息,自动跳到第一个出错的地方,让你进行修改;修改完后,使用一个快捷键,跳到下一个错误处,再进行
2014-09-09 20:37:02 1572
原创 Linux如何解决动态库的版本控制
(换句话说,soname不是真实存在的文件,只是在此库中和将来调用此库的文件中保存的一个名字,在加载时去找这个名字,使用时创建一个软连接来指向真实文件,这样真实文件的版本号就可以升级了) Linux 系统,也同样面临和Window一样的问题,如何控制动态库的多个版本问题。Window之前没有处理好,为此专门有个名词来形容这个问题 “Dll hell”,其严重影响软件的升级和维护。 Dll
2014-09-09 13:26:57 496
原创 nm、readelf和共享库
逛论坛时 有人说现在linux系统里的.so大部分不是用gcc -shared生成的,本身不包含符号表,而符号表是保存在一个.a文件里的,链接时只需要那个.a就可以了,类似Windows那样。第一次听说这样的事,我也试试:$nm /usr/lib/libm.sonm: /usr/lib/libm.so: no symbols果然如此,上网查了查,有人说是因为
2014-09-09 13:16:03 1366
原创 chroot 与 jail
所谓“监牢”就是指通过chroot机制来更改某个进程所能看到的根文件夹,即将某进程限制在指定文件夹中,保证该进程仅仅能对该文件夹及其子文件夹的文件有所动作,从而保证整个server的安全。 创建chroot“监牢” 曾经,Unix/Linux上的daemon都是以root权限启动的。当时,这似乎是一件理所当然的事情,由于像Apache这种server软件须要绑定到“众所
2014-09-09 13:02:12 803
原创 shell中括号的特殊用法 linux if多条件判断
Shell中的括号有其特殊的用法, 现总结如下:1. 符号$后的括号${a} 变量a的值, 在不引起歧义的情况下可以省略大括号.$(cmd) 命令替换, 结果为shell命令cmd的输出, 和`cmd`效果相同, 不过某些Shell版本不支持$()形式的命令替换, 如tcsh.$((exp)) 和`expr exp`效果相同, 计算数学表达式exp的数值, 其中exp只要符合C语言
2014-09-09 11:09:45 27419 1
原创 网络后台开发工具 tcpdump(抓包) route(路由) nslookup和host(路由) md5sum(版本校验)
tcpdump抓包:想输出点分十进制: tcpdump -n *** 想输出mac地址: tcpdump -e *** 抓到目标为A的包: tcpdump dst A //需要root权限,或sudo。 route添加路由 :
2014-09-09 10:45:08 979
原创 Shell脚本内置变量 和 awk脚本内置变量 比较
1、参数个数: Shell使用$#表示输入的参数个数; awk使用ARGC表示输入的参数个数;2、参数内容: Shell使用$*或者$@表示参数的内容;Shell没有将参数当做数组来处理。 awk使用ARGV表示参数内容;awk将参数当做一个数组来出来。3、内置变量:
2014-09-09 09:39:30 941
原创 awk脚本 模式匹配语句 ~匹配运算符 !~不匹配运算符
网络后台开发工具 tcpdump(抓包) route(路由) nslookup和host(路由) md5sum(版本校验) Linux文件权限的修改chmod命令参数详解及umask值的含义awk脚本 模式匹配语句 ~匹配运算符 !~不匹配运算符 2010-12-02 09:16:49| 分类:Shell脚本编程 | 标签:|举
2014-09-09 09:37:22 5865
原创 shell如何模块化和复用——shell深入学习
shell如何模块化和复用——shell深入学习2011-09-18 星期天 阴天基本上所有的编程语言都支持模块化,以达到功能复用的效果。比如java和python的import xxx。C/C++的include。那么shell支持模块化吗?shell本质上并不支持模块化,但是有些机制可以使它达到类似的效果。首先要了解有两种方式可以执行一个sh
2014-09-05 20:45:43 697
原创 shell
if 语句格式if 条件then Commandelse Commandfi 别忘了这个结尾If语句忘了结尾fitest.sh: line 14: syntax error: unexpected end of fi if 的三种条件表达式
2014-09-05 20:34:22 346
转载 深入理解SetUID ************************888
而内核检查一个进程是否具有访问某权限时,是使用进程的有效用户 ID 来进行检查的。
2014-09-05 18:24:24 573
原创 Linux使用日志系统调试守护进程
守护进程脱离终端控制,在调试时候造成一定不便。可以用syslog服务把程序出错信息输入日志文件中。从而可以看出问题所在。 把上次的程序用日志方式改写。 主要用到三个函数:syslog,openlog,closelog。 守护进程的写法不变,加入日志服务。 代码来自华清远见: #include #include #include #include
2014-09-05 18:08:02 1239
原创 系统日志函数syslog(),openlog(),closelog()
今天完成一个守护进程实验。 1 熟悉守护进程编写和调试(系统日志) 2 编写多进程程序的方法 本实验首先创建一个守护进程,然后在其中新建一个子进程,暂停10秒,自动退出,守护进程收集子进程退出的消息。源代码来自华清远见 #include #include #include #include #include #include int ma
2014-09-05 18:05:08 733
原创 linux守护进程小例 与syslog
程序目的:设计三个并发的守护进程在后台运行,其中第一子进程写守护进程的运行日志记录,第二子进程child2则监控进程中是否有gedit工具调用,第二子进程child3则检查自己是否有新邮件到达,若有则将邮件内容输出到一个主目录下文件 程序分析:此处我借用fork()函数创建三个并发的守护进程,借用syslog调试程序运行;其中,第二子进程child2作为gedit工具调用的监控守护进程,
2014-09-05 17:40:04 766
原创 linux下daemon守护进程的实现(以nginx代码为例)
ngx_int_tngx_daemon(ngx_log_t *log){ int fd; // 让init进程成为新产生进程的父进程: // 调用fork函数创建子进程后,使父进程立即退出。这样,产生的子进程将变成孤儿进程,并被init进程接管, // 同时,所产生的新进程将变为在后台运行。 switch (fork()) { case -1:
2014-09-05 17:37:19 678
原创 Linux中exec系列函数的应用
这段时间在研究linux中用户登陆和shell执行程序的原理。我们知道,shell命令分为内部命令和外部命令,内部命令有诸如cd,history,exit,echo等,常见的外部命令有ls,ping,netstat等,通过type命令可以查看一个命令是内部命令还是外部命令。当执行的命令是一个内部命令是,shell直接执行;那么shell是如何执行一个外部命令的呢?Shell本身也是一个程序
2014-09-05 17:27:24 1896
原创 linux下dup/dup2函数的用法
系统调用dup和dup2能够复制文件描述符。dup返回新的文件文件描述符(没有用的文件描述符最小的编号)。dup2可以让用户指定返回的文件描述符的值,如果需要,则首先接近newfd的值,他通常用来重新打开或者重定向一个文件描述符。他的原型如下:#include int dup(int oldfd);int dup2(int oldfd,int newfd);dup 和dup2都
2014-09-05 17:26:17 492
原创 用Python给Linux编写守护进程
守护进程(daemon)是指在UNIX或其他多任务操作系统中在后台执行的电脑程序,并不会接受电脑用户的直接操控。此类程序会被以进程的形式初始化。通常,守护进程没有任何存在的父进程(即PPID=1),且在UNIX系统进程层级中直接位于init之下。守护进程程序通常通过如下方法使自己成为守护进程:对一个子进程调用fork,然后使其父进程立即终止,使得这个子进程能在init下运行。–维基百科
2014-09-05 17:17:46 549
原创 Linux 技巧:让进程在后台可靠运行的几种方法
http://www.ibm.com/developerworks/cn/linux/l-cn-nohup/index.html
2014-09-05 16:55:21 302
转载 Linux修改进程名称(setproctitle())
每一个c程序都有个main函数,作为程序启动入口函数。main函数的原型是int main(int argc , char *argv[]);其中argc表示命令行参数的个数;argv是一个指针数组,保存所有命令行字符串。Linux进程名称是通过命令行参数argv[0]来表示的。Linux 还有环境变量参数信息,表示进程执行需要的所有环境变量信息。通过全局变量Char **environ;
2014-09-05 16:29:17 2384
原创 memcached源码学习-Main线程
看了看memcached, memcached 主要的线程框架是master-slave的主线程-工作线程模式,单进程,多线程,之间通过管道和链表通信,基本就是这样。下面具体看下代码。worker工作线程memcached服务其使用libevent库进行网络事件的监听等,在main函数的开头,解析完所有的配置参数后,主线程会先创建一个struct event_base *main_ba
2014-09-05 15:59:08 423
原创 memcached源码分析之线程池机制-----worker线程
/* Create threads after we've done all the libevent setup. */ for (i = 0; i //为线程池创建数目为nthreads的线程,worker_libevent为线程的回调函数, create_worker(worker_libevent, &threads[i]); }
2014-09-05 15:50:59 501
原创 memcached Master-Worker 模型分析
scgi的实现是用的多进程,主进程负责监听socket连接请求,然后分发给各个子进程来处理。nginx的实现是用的多进程,创建好子进程之后,各个子进程直接自己来监听socket连接请求并处理。memched的实现则是用的多线程,主线程负责监听请求,然后分发给各个子线程来处理。
2014-09-05 14:36:14 449
原创 Multiple Private Networks with Open vSwitch GRE Tunnels and Libvirt
http://trickycloud.wordpress.com/2014/05/02/multiple-private-networks-with-open-vswitch-gre-tunnels-and-libvirt/
2014-09-05 12:04:13 1049
原创 Using GRE Tunnels with Open vSwitch
http://blog.scottlowe.org/2013/05/07/using-gre-tunnels-with-open-vswitch/ I’m back with another “how to” article on Open vSwitch (OVS), this time taking a look at using GRE (Generic Routing Enca
2014-09-05 11:53:30 665
原创 Linux Switching – Interconnecting Namespaces 母机桥技术
Switching in software on Linux is one of the important parts when using virtualization technologies like KVM or LXC. Typical hosts do not provide one or more physical adapters for each NIC of a virtua
2014-09-05 11:45:45 710
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人